# Loading necessary libraries
library(tidyverse)
library(Seurat)
library(viridis)
library(patchwork)
library(DropletUtils)
library(future)
library(tibble)
library(ComplexHeatmap)
library(GEOquery)

# Additional color scales
library(MetBrewer)
library(NatParksPalettes)

# Parallel processing setup
plan("multicore", workers = 80)
options(future.globals.maxSize = 30 * 1024^3) # 30 GB

# Custom themes and scales for plots
mytheme <- theme_minimal() + 
  theme(axis.line = element_line(),
        axis.ticks = element_line(),
        text = element_text(family = "Helvetica"))

simple <- NoAxes() + NoLegend()
mysc <- scale_color_viridis(option = "A")
region.pal <- c("#5EBFA2", "#F69663", "#731DD8",  "#FB7C7E")

# List of sex-specific genes
sex.genes <- c("TTTY14", "NLGN4Y", "USP9Y", "UTY", "XIST", "RPS4X", "TMSB4X", "TSIX")

#levels for some metadata categories:
age.levels <- c("23GW", "14d", "33d", "54d", "2y", "3y", "13y", "27y", "50y", "51y", "79y")
age.group.levels <- c("Fetal (23GW)", "Infant (14d-54d)", "Toddler (2y-3y)", "Teen (13y)", "Adult (27y-79y)")
region.levels <- c("Germinal Zone", "Embryonic EC", "Migratory Stream", "Postnatal EC")

#Creating seurat objects from count matrices Count matrices and metadata are downloaded from GEO and saved in a folder named “matrices”.

download.file("https://www.ncbi.nlm.nih.gov/geo/download/?acc=GSE199762&format=file&file=GSE199762%5Fsamples%5Ffrom%5FGSE186538%2Etar%2Egz", 
              method = "curl", 
              "matrices/franjic_et_al_samples.tar.gz")
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
  0  709M    0  161k    0     0   285k      0  0:42:24 --:--:--  0:42:24  285k
  1  709M    1 10.9M    0     0  7078k      0  0:01:42  0:00:01  0:01:41 7078k
  2  709M    2 17.2M    0     0  6863k      0  0:01:45  0:00:02  0:01:43 6861k
  3  709M    3 23.4M    0     0  6711k      0  0:01:48  0:00:03  0:01:45 6711k
  4  709M    4 30.0M    0     0  6707k      0  0:01:48  0:00:04  0:01:44 6706k
  5  709M    5 35.7M    0     0  6582k      0  0:01:50  0:00:05  0:01:45 7294k
  5  709M    5 40.0M    0     0  6245k      0  0:01:56  0:00:06  0:01:50 5978k
  6  709M    6 43.9M    0     0  5949k      0  0:02:02  0:00:07  0:01:55 5477k
  6  709M    6 47.0M    0     0  5622k      0  0:02:09  0:00:08  0:02:01 4838k
  7  709M    7 50.2M    0     0  5378k      0  0:02:15  0:00:09  0:02:06 4152k
  7  709M    7 53.2M    0     0  5154k      0  0:02:20  0:00:10  0:02:10 3575k
  7  709M    7 56.1M    0     0  4969k      0  0:02:26  0:00:11  0:02:15 3295k
  8  709M    8 59.3M    0     0  4836k      0  0:02:30  0:00:12  0:02:18 3156k
  8  709M    8 61.9M    0     0  4681k      0  0:02:35  0:00:13  0:02:22 3068k
  9  709M    9 64.7M    0     0  4551k      0  0:02:39  0:00:14  0:02:25 2966k
  9  709M    9 67.1M    0     0  4417k      0  0:02:44  0:00:15  0:02:29 2851k
  9  709M    9 68.7M    0     0  4247k      0  0:02:50  0:00:16  0:02:34 2581k
  9  709M    9 70.3M    0     0  4097k      0  0:02:57  0:00:17  0:02:40 2243k
 10  709M   10 71.3M    0     0  3934k      0  0:03:04  0:00:18  0:02:46 1908k
 10  709M   10 72.4M    0     0  3793k      0  0:03:11  0:00:19  0:02:52 1587k
 10  709M   10 73.8M    0     0  3676k      0  0:03:17  0:00:20  0:02:57 1370k
 10  709M   10 75.3M    0     0  3579k      0  0:03:22  0:00:21  0:03:01 1361k
 10  709M   10 77.0M    0     0  3496k      0  0:03:27  0:00:22  0:03:05 1377k
 11  709M   11 78.9M    0     0  3430k      0  0:03:31  0:00:23  0:03:08 1559k
 11  709M   11 81.0M    0     0  3376k      0  0:03:35  0:00:24  0:03:11 1747k
 11  709M   11 83.2M    0     0  3335k      0  0:03:37  0:00:25  0:03:12 1935k
 12  709M   12 85.6M    0     0  3301k      0  0:03:39  0:00:26  0:03:13 2106k
 12  709M   12 87.6M    0     0  3256k      0  0:03:43  0:00:27  0:03:16 2172k
 12  709M   12 89.5M    0     0  3209k      0  0:03:46  0:00:28  0:03:18 2172k
 12  709M   12 91.5M    0     0  3170k      0  0:03:49  0:00:29  0:03:20 2157k
 13  709M   13 93.4M    0     0  3129k      0  0:03:52  0:00:30  0:03:22 2075k
 13  709M   13 94.9M    0     0  3078k      0  0:03:55  0:00:31  0:03:24 1893k
 13  709M   13 96.4M    0     0  3031k      0  0:03:59  0:00:32  0:03:27 1795k
 13  709M   13 98.1M    0     0  2992k      0  0:04:02  0:00:33  0:03:29 1751k
 14  709M   14 99.9M    0     0  2961k      0  0:04:05  0:00:34  0:03:31 1721k
 14  709M   14  101M    0     0  2924k      0  0:04:08  0:00:35  0:03:33 1675k
 14  709M   14  102M    0     0  2881k      0  0:04:11  0:00:36  0:03:35 1640k
 14  709M   14  103M    0     0  2831k      0  0:04:16  0:00:37  0:03:39 1530k
 14  709M   14  105M    0     0  2788k      0  0:04:20  0:00:38  0:03:42 1428k
 15  709M   15  106M    0     0  2754k      0  0:04:23  0:00:39  0:03:44 1326k
 15  709M   15  107M    0     0  2724k      0  0:04:26  0:00:40  0:03:46 1299k
 15  709M   15  109M    0     0  2688k      0  0:04:30  0:00:41  0:03:49 1271k
 15  709M   15  109M    0     0  2645k      0  0:04:34  0:00:42  0:03:52 1242k
 15  709M   15  110M    0     0  2606k      0  0:04:38  0:00:43  0:03:55 1185k
 15  709M   15  111M    0     0  2573k      0  0:04:42  0:00:44  0:03:58 1140k
 15  709M   15  113M    0     0  2545k      0  0:04:45  0:00:45  0:04:00 1099k
 16  709M   16  114M    0     0  2516k      0  0:04:48  0:00:46  0:04:02 1082k
 16  709M   16  115M    0     0  2487k      0  0:04:51  0:00:47  0:04:04 1159k
 16  709M   16  116M    0     0  2461k      0  0:04:55  0:00:48  0:04:07 1201k
 16  709M   16  117M    0     0  2436k      0  0:04:58  0:00:49  0:04:09 1217k
 16  709M   16  119M    0     0  2416k      0  0:05:00  0:00:50  0:04:10 1235k
 17  709M   17  120M    0     0  2400k      0  0:05:02  0:00:51  0:04:11 1319k
 17  709M   17  122M    0     0  2380k      0  0:05:05  0:00:52  0:04:13 1353k
 17  709M   17  123M    0     0  2361k      0  0:05:07  0:00:53  0:04:14 1400k
 17  709M   17  124M    0     0  2343k      0  0:05:09  0:00:54  0:04:15 1418k
 17  709M   17  125M    0     0  2320k      0  0:05:12  0:00:55  0:04:17 1353k
 17  709M   17  127M    0     0  2302k      0  0:05:15  0:00:56  0:04:19 1299k
 18  709M   18  128M    0     0  2284k      0  0:05:17  0:00:57  0:04:20 1269k
 18  709M   18  129M    0     0  2261k      0  0:05:21  0:00:58  0:04:23 1183k
 18  709M   18  130M    0     0  2240k      0  0:05:24  0:00:59  0:04:25 1118k
 18  709M   18  131M    0     0  2221k      0  0:05:26  0:01:00  0:04:26 1118k
 18  709M   18  132M    0     0  2201k      0  0:05:29  0:01:01  0:04:28 1067k
 18  709M   18  133M    0     0  2187k      0  0:05:32  0:01:02  0:04:30 1067k
 19  709M   19  134M    0     0  2173k      0  0:05:34  0:01:03  0:04:31 1144k
 19  709M   19  136M    0     0  2163k      0  0:05:35  0:01:04  0:04:31 1244k
 19  709M   19  138M    0     0  2156k      0  0:05:36  0:01:05  0:04:31 1372k
 19  709M   19  139M    0     0  2152k      0  0:05:37  0:01:06  0:04:31 1540k
 20  709M   20  141M    0     0  2151k      0  0:05:37  0:01:07  0:04:30 1708k
 20  709M   20  143M    0     0  2149k      0  0:05:37  0:01:08  0:04:29 1840k
 20  709M   20  145M    0     0  2147k      0  0:05:38  0:01:09  0:04:29 1943k
 20  709M   20  147M    0     0  2141k      0  0:05:39  0:01:10  0:04:29 1941k
 21  709M   21  148M    0     0  2131k      0  0:05:40  0:01:11  0:04:29 1851k
 21  709M   21  149M    0     0  2116k      0  0:05:43  0:01:12  0:04:31 1637k
 21  709M   21  150M    0     0  2099k      0  0:05:45  0:01:13  0:04:32 1409k
 21  709M   21  151M    0     0  2083k      0  0:05:48  0:01:14  0:04:34 1191k
 21  709M   21  152M    0     0  2068k      0  0:05:51  0:01:15  0:04:36 1042k
 21  709M   21  153M    0     0  2052k      0  0:05:53  0:01:16  0:04:37  915k
 21  709M   21  154M    0     0  2038k      0  0:05:56  0:01:17  0:04:39  907k
 21  709M   21  155M    0     0  2026k      0  0:05:58  0:01:18  0:04:40  949k
 22  709M   22  156M    0     0  2012k      0  0:06:00  0:01:19  0:04:41  956k
 22  709M   22  157M    0     0  1998k      0  0:06:03  0:01:20  0:04:43  936k
 22  709M   22  158M    0     0  1986k      0  0:06:05  0:01:21  0:04:44  985k
 22  709M   22  159M    0     0  1974k      0  0:06:07  0:01:22  0:04:45  983k
 22  709M   22  160M    0     0  1964k      0  0:06:09  0:01:23  0:04:46  984k
 22  709M   22  161M    0     0  1954k      0  0:06:11  0:01:24  0:04:47 1041k
 22  709M   22  162M    0     0  1948k      0  0:06:12  0:01:25  0:04:47 1145k
 23  709M   23  163M    0     0  1936k      0  0:06:14  0:01:26  0:04:48 1127k
 23  709M   23  164M    0     0  1926k      0  0:06:17  0:01:27  0:04:50 1127k
 23  709M   23  165M    0     0  1915k      0  0:06:19  0:01:28  0:04:51 1112k
 23  709M   23  166M    0     0  1906k      0  0:06:20  0:01:29  0:04:51 1079k
 23  709M   23  167M    0     0  1898k      0  0:06:22  0:01:30  0:04:52 1035k
 23  709M   23  168M    0     0  1889k      0  0:06:24  0:01:31  0:04:53 1068k
 23  709M   23  170M    0     0  1882k      0  0:06:25  0:01:32  0:04:53 1118k
 24  709M   24  171M    0     0  1873k      0  0:06:27  0:01:33  0:04:54 1121k
 24  709M   24  172M    0     0  1865k      0  0:06:29  0:01:34  0:04:55 1136k
 24  709M   24  173M    0     0  1859k      0  0:06:30  0:01:35  0:04:55 1165k
 24  709M   24  174M    0     0  1855k      0  0:06:31  0:01:36  0:04:55 1236k
 24  709M   24  176M    0     0  1850k      0  0:06:32  0:01:37  0:04:55 1263k
 25  709M   25  177M    0     0  1846k      0  0:06:33  0:01:38  0:04:55 1348k
 25  709M   25  179M    0     0  1842k      0  0:06:34  0:01:39  0:04:55 1403k
 25  709M   25  180M    0     0  1834k      0  0:06:35  0:01:40  0:04:55 1350k
 25  709M   25  181M    0     0  1827k      0  0:06:37  0:01:41  0:04:56 1278k
 25  709M   25  182M    0     0  1820k      0  0:06:38  0:01:42  0:04:56 1225k
 25  709M   25  183M    0     0  1813k      0  0:06:40  0:01:43  0:04:57 1162k
 26  709M   26  184M    0     0  1806k      0  0:06:42  0:01:44  0:04:58 1083k
 26  709M   26  185M    0     0  1797k      0  0:06:43  0:01:45  0:04:58 1056k
 26  709M   26  186M    0     0  1789k      0  0:06:45  0:01:46  0:04:59 1014k
 26  709M   26  187M    0     0  1780k      0  0:06:47  0:01:47  0:05:00  963k
 26  709M   26  187M    0     0  1773k      0  0:06:49  0:01:48  0:05:01  931k
 26  709M   26  189M    0     0  1767k      0  0:06:50  0:01:49  0:05:01  948k
 26  709M   26  190M    0     0  1760k      0  0:06:52  0:01:50  0:05:02  974k
 26  709M   26  191M    0     0  1754k      0  0:06:53  0:01:51  0:05:02 1007k
 27  709M   27  192M    0     0  1746k      0  0:06:55  0:01:52  0:05:03 1025k
 27  709M   27  193M    0     0  1740k      0  0:06:57  0:01:53  0:05:04 1030k
 27  709M   27  194M    0     0  1733k      0  0:06:58  0:01:54  0:05:04 1012k
 27  709M   27  195M    0     0  1728k      0  0:07:00  0:01:55  0:05:05 1034k
 27  709M   27  196M    0     0  1723k      0  0:07:01  0:01:56  0:05:05 1049k
 27  709M   27  197M    0     0  1719k      0  0:07:02  0:01:57  0:05:05 1097k
 28  709M   28  198M    0     0  1715k      0  0:07:03  0:01:58  0:05:05 1152k
 28  709M   28  200M    0     0  1712k      0  0:07:03  0:01:59  0:05:04 1227k
 28  709M   28  201M    0     0  1712k      0  0:07:04  0:02:00  0:05:04 1324k
 28  709M   28  203M    0     0  1713k      0  0:07:03  0:02:01  0:05:02 1461k
 28  709M   28  205M    0     0  1715k      0  0:07:03  0:02:02  0:05:01 1624k
 29  709M   29  207M    0     0  1719k      0  0:07:02  0:02:03  0:04:59 1802k
 29  709M   29  209M    0     0  1721k      0  0:07:01  0:02:04  0:04:57 1925k
 29  709M   29  211M    0     0  1723k      0  0:07:01  0:02:05  0:04:56 2006k
 30  709M   30  213M    0     0  1728k      0  0:07:00  0:02:06  0:04:54 2101k
 30  709M   30  215M    0     0  1732k      0  0:06:59  0:02:07  0:04:52 2145k
 30  709M   30  218M    0     0  1737k      0  0:06:57  0:02:08  0:04:49 2185k
 31  709M   31  220M    0     0  1743k      0  0:06:56  0:02:09  0:04:47 2284k
 31  709M   31  223M    0     0  1751k      0  0:06:54  0:02:10  0:04:44 2437k
 31  709M   31  226M    0     0  1759k      0  0:06:52  0:02:11  0:04:41 2557k
 32  709M   32  229M    0     0  1769k      0  0:06:50  0:02:12  0:04:38 2737k
 32  709M   32  231M    0     0  1775k      0  0:06:48  0:02:13  0:04:35 2765k
 33  709M   33  234M    0     0  1781k      0  0:06:47  0:02:14  0:04:33 2786k
 33  709M   33  236M    0     0  1785k      0  0:06:46  0:02:15  0:04:31 2674k
 33  709M   33  238M    0     0  1787k      0  0:06:46  0:02:16  0:04:30 2504k
 33  709M   33  239M    0     0  1783k      0  0:06:47  0:02:17  0:04:30 2136k
 33  709M   33  240M    0     0  1778k      0  0:06:48  0:02:18  0:04:30 1840k
 34  709M   34  241M    0     0  1772k      0  0:06:49  0:02:19  0:04:30 1513k
 34  709M   34  242M    0     0  1766k      0  0:06:51  0:02:20  0:04:31 1259k
 34  709M   34  243M    0     0  1760k      0  0:06:52  0:02:21  0:04:31 1048k
 34  709M   34  244M    0     0  1753k      0  0:06:54  0:02:22  0:04:32  945k
 34  709M   34  244M    0     0  1744k      0  0:06:56  0:02:23  0:04:33  804k
 34  709M   34  245M    0     0  1735k      0  0:06:58  0:02:24  0:04:34  721k
 34  709M   34  245M    0     0  1728k      0  0:07:00  0:02:25  0:04:35  665k
 34  709M   34  246M    0     0  1722k      0  0:07:01  0:02:26  0:04:35  641k
 34  709M   34  247M    0     0  1717k      0  0:07:02  0:02:27  0:04:35  673k
 35  709M   35  248M    0     0  1712k      0  0:07:04  0:02:28  0:04:36  797k
 35  709M   35  249M    0     0  1708k      0  0:07:05  0:02:29  0:04:36  915k
 35  709M   35  250M    0     0  1705k      0  0:07:05  0:02:30  0:04:35 1027k
 35  709M   35  252M    0     0  1703k      0  0:07:06  0:02:31  0:04:35 1122k
 35  709M   35  253M    0     0  1700k      0  0:07:07  0:02:32  0:04:35 1191k
 35  709M   35  254M    0     0  1696k      0  0:07:07  0:02:33  0:04:34 1232k
 36  709M   36  255M    0     0  1693k      0  0:07:08  0:02:34  0:04:34 1252k
 36  709M   36  256M    0     0  1691k      0  0:07:09  0:02:35  0:04:34 1269k
 36  709M   36  258M    0     0  1688k      0  0:07:10  0:02:36  0:04:34 1255k
 36  709M   36  259M    0     0  1686k      0  0:07:10  0:02:37  0:04:33 1281k
 36  709M   36  261M    0     0  1685k      0  0:07:10  0:02:38  0:04:32 1338k
 36  709M   36  262M    0     0  1683k      0  0:07:11  0:02:39  0:04:32 1373k
 37  709M   37  263M    0     0  1682k      0  0:07:11  0:02:40  0:04:31 1394k
 37  709M   37  265M    0     0  1680k      0  0:07:12  0:02:41  0:04:31 1418k
 37  709M   37  266M    0     0  1678k      0  0:07:12  0:02:42  0:04:30 1403k
 37  709M   37  267M    0     0  1676k      0  0:07:13  0:02:43  0:04:30 1389k
 37  709M   37  269M    0     0  1676k      0  0:07:13  0:02:44  0:04:29 1445k
 38  709M   38  271M    0     0  1677k      0  0:07:12  0:02:45  0:04:27 1518k
 38  709M   38  273M    0     0  1679k      0  0:07:12  0:02:46  0:04:26 1645k
 38  709M   38  275M    0     0  1682k      0  0:07:11  0:02:47  0:04:24 1826k
 39  709M   39  277M    0     0  1686k      0  0:07:10  0:02:48  0:04:22 2013k
 39  709M   39  280M    0     0  1692k      0  0:07:09  0:02:49  0:04:20 2209k
 39  709M   39  283M    0     0  1701k      0  0:07:06  0:02:50  0:04:16 2489k
 40  709M   40  287M    0     0  1715k      0  0:07:03  0:02:51  0:04:12 2937k
 41  709M   41  291M    0     0  1727k      0  0:07:00  0:02:52  0:04:08 3246k
 41  709M   41  295M    0     0  1743k      0  0:06:56  0:02:53  0:04:03 3669k
 41  709M   41  297M    0     0  1746k      0  0:06:55  0:02:54  0:04:01 3569k
 42  709M   42  299M    0     0  1744k      0  0:06:56  0:02:55  0:04:01 3240k
 42  709M   42  300M    0     0  1743k      0  0:06:56  0:02:56  0:04:00 2691k
 42  709M   42  302M    0     0  1743k      0  0:06:56  0:02:57  0:03:59 2279k
 42  709M   42  304M    0     0  1743k      0  0:06:56  0:02:58  0:03:58 1741k
 43  709M   43  306M    0     0  1745k      0  0:06:56  0:02:59  0:03:57 1720k
 43  709M   43  308M    0     0  1748k      0  0:06:55  0:03:00  0:03:55 1863k
 43  709M   43  310M    0     0  1751k      0  0:06:54  0:03:01  0:03:53 2046k
 44  709M   44  313M    0     0  1756k      0  0:06:53  0:03:02  0:03:51 2234k
 44  709M   44  315M    0     0  1760k      0  0:06:52  0:03:03  0:03:49 2357k
 44  709M   44  317M    0     0  1761k      0  0:06:52  0:03:04  0:03:48 2323k
 45  709M   45  319M    0     0  1761k      0  0:06:52  0:03:05  0:03:47 2248k
 45  709M   45  321M    0     0  1763k      0  0:06:51  0:03:06  0:03:45 2169k
 45  709M   45  322M    0     0  1762k      0  0:06:52  0:03:07  0:03:45 1970k
 45  709M   45  324M    0     0  1763k      0  0:06:51  0:03:08  0:03:43 1870k
 45  709M   45  325M    0     0  1761k      0  0:06:52  0:03:09  0:03:43 1759k
 46  709M   46  326M    0     0  1756k      0  0:06:53  0:03:10  0:03:43 1559k
 46  709M   46  327M    0     0  1751k      0  0:06:54  0:03:11  0:03:43 1321k
 46  709M   46  328M    0     0  1747k      0  0:06:55  0:03:12  0:03:43 1188k
 46  709M   46  329M    0     0  1743k      0  0:06:56  0:03:13  0:03:43  989k
 46  709M   46  330M    0     0  1739k      0  0:06:57  0:03:14  0:03:43  932k
 46  709M   46  331M    0     0  1736k      0  0:06:58  0:03:15  0:03:43  983k
 46  709M   46  332M    0     0  1734k      0  0:06:58  0:03:16  0:03:42 1080k
 47  709M   47  334M    0     0  1731k      0  0:06:59  0:03:17  0:03:42 1123k
 47  709M   47  335M    0     0  1729k      0  0:06:59  0:03:18  0:03:41 1209k
 47  709M   47  336M    0     0  1728k      0  0:07:00  0:03:19  0:03:41 1289k
 47  709M   47  338M    0     0  1727k      0  0:07:00  0:03:20  0:03:40 1382k
 47  709M   47  339M    0     0  1725k      0  0:07:00  0:03:21  0:03:39 1379k
 48  709M   48  340M    0     0  1721k      0  0:07:01  0:03:22  0:03:39 1312k
 48  709M   48  341M    0     0  1717k      0  0:07:02  0:03:23  0:03:39 1229k
 48  709M   48  342M    0     0  1714k      0  0:07:03  0:03:24  0:03:39 1181k
 48  709M   48  343M    0     0  1713k      0  0:07:03  0:03:25  0:03:38 1125k
 48  709M   48  345M    0     0  1712k      0  0:07:04  0:03:26  0:03:38 1168k
 48  709M   48  346M    0     0  1709k      0  0:07:04  0:03:27  0:03:37 1220k
 49  709M   49  347M    0     0  1706k      0  0:07:05  0:03:28  0:03:37 1238k
 49  709M   49  348M    0     0  1701k      0  0:07:06  0:03:29  0:03:37 1155k
 49  709M   49  349M    0     0  1697k      0  0:07:07  0:03:30  0:03:37 1054k
 49  709M   49  349M    0     0  1693k      0  0:07:08  0:03:31  0:03:37  924k
 49  709M   49  350M    0     0  1689k      0  0:07:09  0:03:32  0:03:37  882k
 49  709M   49  351M    0     0  1686k      0  0:07:10  0:03:33  0:03:37  885k
 49  709M   49  353M    0     0  1684k      0  0:07:11  0:03:34  0:03:37  970k
 49  709M   49  354M    0     0  1681k      0  0:07:11  0:03:35  0:03:36 1024k
 50  709M   50  354M    0     0  1677k      0  0:07:12  0:03:36  0:03:36 1012k
 50  709M   50  355M    0     0  1673k      0  0:07:13  0:03:37  0:03:36  988k
 50  709M   50  356M    0     0  1669k      0  0:07:14  0:03:38  0:03:36  932k
 50  709M   50  357M    0     0  1665k      0  0:07:15  0:03:39  0:03:36  865k
 50  709M   50  358M    0     0  1662k      0  0:07:16  0:03:40  0:03:36  839k
 50  709M   50  359M    0     0  1660k      0  0:07:17  0:03:41  0:03:36  910k
 50  709M   50  360M    0     0  1657k      0  0:07:18  0:03:42  0:03:36  968k
 50  709M   50  361M    0     0  1655k      0  0:07:18  0:03:43  0:03:35 1045k
 51  709M   51  363M    0     0  1656k      0  0:07:18  0:03:44  0:03:34 1261k
 51  709M   51  366M    0     0  1662k      0  0:07:16  0:03:45  0:03:31 1660k
 52  709M   52  369M    0     0  1670k      0  0:07:14  0:03:46  0:03:28 2097k
 52  709M   52  372M    0     0  1677k      0  0:07:12  0:03:47  0:03:25 2556k
 53  709M   53  376M    0     0  1686k      0  0:07:10  0:03:48  0:03:22 3074k
 53  709M   53  380M    0     0  1695k      0  0:07:08  0:03:49  0:03:19 3419k
 53  709M   53  382M    0     0  1698k      0  0:07:07  0:03:50  0:03:17 3312k
 54  709M   54  384M    0     0  1701k      0  0:07:06  0:03:51  0:03:15 3119k
 54  709M   54  387M    0     0  1703k      0  0:07:06  0:03:52  0:03:14 2897k
 54  709M   54  388M    0     0  1705k      0  0:07:05  0:03:53  0:03:12 2562k
 55  709M   55  391M    0     0  1707k      0  0:07:05  0:03:54  0:03:11 2287k
 55  709M   55  393M    0     0  1711k      0  0:07:04  0:03:55  0:03:09 2301k
 55  709M   55  396M    0     0  1713k      0  0:07:03  0:03:56  0:03:07 2290k
 56  709M   56  397M    0     0  1713k      0  0:07:03  0:03:57  0:03:06 2178k
 56  709M   56  399M    0     0  1713k      0  0:07:03  0:03:58  0:03:05 2072k
 56  709M   56  400M    0     0  1713k      0  0:07:03  0:03:59  0:03:04 1966k
 56  709M   56  402M    0     0  1714k      0  0:07:03  0:04:00  0:03:03 1869k
 57  709M   57  404M    0     0  1715k      0  0:07:03  0:04:01  0:03:02 1803k
 57  709M   57  406M    0     0  1717k      0  0:07:02  0:04:02  0:03:00 1893k
 57  709M   57  408M    0     0  1716k      0  0:07:03  0:04:03  0:03:00 1878k
 57  709M   57  409M    0     0  1714k      0  0:07:03  0:04:04  0:02:59 1751k
 57  709M   57  410M    0     0  1712k      0  0:07:04  0:04:05  0:02:59 1601k
 58  709M   58  411M    0     0  1710k      0  0:07:04  0:04:06  0:02:58 1446k
 58  709M   58  413M    0     0  1708k      0  0:07:05  0:04:07  0:02:58 1258k
 58  709M   58  414M    0     0  1706k      0  0:07:05  0:04:08  0:02:57 1225k
 58  709M   58  415M    0     0  1704k      0  0:07:06  0:04:09  0:02:57 1227k
 58  709M   58  416M    0     0  1702k      0  0:07:06  0:04:10  0:02:56 1217k
 58  709M   58  417M    0     0  1698k      0  0:07:07  0:04:11  0:02:56 1123k
 58  709M   58  417M    0     0  1694k      0  0:07:08  0:04:12  0:02:56 1009k
 59  709M   59  418M    0     0  1690k      0  0:07:09  0:04:13  0:02:56  873k
 59  709M   59  419M    0     0  1686k      0  0:07:10  0:04:14  0:02:56  811k
 59  709M   59  420M    0     0  1683k      0  0:07:11  0:04:15  0:02:56  769k
 59  709M   59  421M    0     0  1682k      0  0:07:11  0:04:16  0:02:55  851k
 59  709M   59  422M    0     0  1680k      0  0:07:12  0:04:17  0:02:55  985k
 59  709M   59  423M    0     0  1678k      0  0:07:12  0:04:18  0:02:54 1094k
 59  709M   59  425M    0     0  1677k      0  0:07:12  0:04:19  0:02:53 1196k
 60  709M   60  426M    0     0  1676k      0  0:07:13  0:04:20  0:02:53 1312k
 60  709M   60  428M    0     0  1676k      0  0:07:13  0:04:21  0:02:52 1387k
 60  709M   60  429M    0     0  1676k      0  0:07:13  0:04:22  0:02:51 1469k
 60  709M   60  431M    0     0  1676k      0  0:07:13  0:04:23  0:02:50 1577k
 61  709M   61  433M    0     0  1677k      0  0:07:13  0:04:24  0:02:49 1660k
 61  709M   61  435M    0     0  1677k      0  0:07:12  0:04:25  0:02:47 1716k
 61  709M   61  436M    0     0  1678k      0  0:07:12  0:04:26  0:02:46 1795k
 61  709M   61  439M    0     0  1680k      0  0:07:12  0:04:27  0:02:45 1859k
 62  709M   62  441M    0     0  1681k      0  0:07:11  0:04:28  0:02:43 1941k
 62  709M   62  442M    0     0  1682k      0  0:07:11  0:04:29  0:02:42 1973k
 62  709M   62  445M    0     0  1684k      0  0:07:11  0:04:30  0:02:41 2045k
 63  709M   63  447M    0     0  1686k      0  0:07:10  0:04:31  0:02:39 2093k
 63  709M   63  449M    0     0  1688k      0  0:07:10  0:04:32  0:02:38 2138k
 63  709M   63  451M    0     0  1690k      0  0:07:09  0:04:33  0:02:36 2134k
 63  709M   63  453M    0     0  1691k      0  0:07:09  0:04:34  0:02:35 2170k
 64  709M   64  455M    0     0  1691k      0  0:07:09  0:04:35  0:02:34 2065k
 64  709M   64  456M    0     0  1690k      0  0:07:09  0:04:36  0:02:33 1904k
 64  709M   64  457M    0     0  1689k      0  0:07:09  0:04:37  0:02:32 1748k
 64  709M   64  459M    0     0  1689k      0  0:07:09  0:04:38  0:02:31 1661k
 65  709M   65  461M    0     0  1690k      0  0:07:09  0:04:39  0:02:30 1637k
 65  709M   65  463M    0     0  1692k      0  0:07:09  0:04:40  0:02:29 1740k
 65  709M   65  465M    0     0  1693k      0  0:07:08  0:04:41  0:02:27 1893k
 66  709M   66  468M    0     0  1696k      0  0:07:08  0:04:42  0:02:26 2080k
 66  709M   66  470M    0     0  1699k      0  0:07:07  0:04:43  0:02:24 2260k
 66  709M   66  472M    0     0  1701k      0  0:07:06  0:04:44  0:02:22 2300k
 66  709M   66  474M    0     0  1702k      0  0:07:06  0:04:45  0:02:21 2310k
 67  709M   67  476M    0     0  1702k      0  0:07:06  0:04:46  0:02:20 2173k
 67  709M   67  477M    0     0  1701k      0  0:07:06  0:04:47  0:02:19 1962k
 67  709M   67  479M    0     0  1700k      0  0:07:07  0:04:48  0:02:19 1719k
 67  709M   67  480M    0     0  1699k      0  0:07:07  0:04:49  0:02:18 1601k
 68  709M   68  482M    0     0  1699k      0  0:07:07  0:04:50  0:02:17 1503k
 68  709M   68  484M    0     0  1700k      0  0:07:07  0:04:51  0:02:16 1582k
 68  709M   68  485M    0     0  1701k      0  0:07:06  0:04:52  0:02:14 1696k
 68  709M   68  488M    0     0  1702k      0  0:07:06  0:04:53  0:02:13 1856k
 69  709M   69  490M    0     0  1703k      0  0:07:06  0:04:54  0:02:12 1933k
 69  709M   69  492M    0     0  1704k      0  0:07:05  0:04:55  0:02:10 2019k
 69  709M   69  493M    0     0  1704k      0  0:07:05  0:04:56  0:02:09 1974k
 69  709M   69  495M    0     0  1705k      0  0:07:05  0:04:57  0:02:08 1960k
 70  709M   70  497M    0     0  1706k      0  0:07:05  0:04:58  0:02:07 1917k
 70  709M   70  499M    0     0  1707k      0  0:07:05  0:04:59  0:02:06 1930k
 70  709M   70  501M    0     0  1708k      0  0:07:05  0:05:00  0:02:05 1893k
 70  709M   70  502M    0     0  1707k      0  0:07:05  0:05:01  0:02:04 1877k
 71  709M   71  504M    0     0  1707k      0  0:07:05  0:05:02  0:02:03 1827k
 71  709M   71  506M    0     0  1708k      0  0:07:05  0:05:03  0:02:02 1811k
 71  709M   71  508M    0     0  1709k      0  0:07:04  0:05:04  0:02:00 1809k
 71  709M   71  510M    0     0  1709k      0  0:07:04  0:05:05  0:01:59 1777k
 72  709M   72  511M    0     0  1709k      0  0:07:04  0:05:06  0:01:58 1842k
 72  709M   72  513M    0     0  1709k      0  0:07:04  0:05:07  0:01:57 1812k
 72  709M   72  514M    0     0  1707k      0  0:07:05  0:05:08  0:01:57 1682k
 72  709M   72  515M    0     0  1706k      0  0:07:05  0:05:09  0:01:56 1561k
 72  709M   72  517M    0     0  1706k      0  0:07:05  0:05:10  0:01:55 1543k
 73  709M   73  519M    0     0  1706k      0  0:07:05  0:05:11  0:01:54 1523k
 73  709M   73  521M    0     0  1707k      0  0:07:05  0:05:12  0:01:53 1608k
 73  709M   73  523M    0     0  1708k      0  0:07:05  0:05:13  0:01:52 1764k
 73  709M   73  524M    0     0  1707k      0  0:07:05  0:05:14  0:01:51 1737k
 74  709M   74  525M    0     0  1706k      0  0:07:05  0:05:15  0:01:50 1686k
 74  709M   74  527M    0     0  1705k      0  0:07:05  0:05:16  0:01:49 1645k
 74  709M   74  529M    0     0  1706k      0  0:07:05  0:05:17  0:01:48 1622k
 74  709M   74  531M    0     0  1706k      0  0:07:05  0:05:18  0:01:47 1606k
 75  709M   75  533M    0     0  1708k      0  0:07:05  0:05:19  0:01:46 1762k
 75  709M   75  535M    0     0  1709k      0  0:07:04  0:05:20  0:01:44 1942k
 75  709M   75  537M    0     0  1710k      0  0:07:04  0:05:21  0:01:43 1987k
 75  709M   75  538M    0     0  1709k      0  0:07:04  0:05:22  0:01:42 1927k
 76  709M   76  540M    0     0  1709k      0  0:07:04  0:05:23  0:01:41 1876k
 76  709M   76  542M    0     0  1710k      0  0:07:04  0:05:24  0:01:40 1851k
 76  709M   76  544M    0     0  1711k      0  0:07:04  0:05:25  0:01:39 1797k
 76  709M   76  545M    0     0  1711k      0  0:07:04  0:05:26  0:01:38 1789k
 77  709M   77  547M    0     0  1710k      0  0:07:04  0:05:27  0:01:37 1773k
 77  709M   77  548M    0     0  1708k      0  0:07:04  0:05:28  0:01:36 1667k
 77  709M   77  549M    0     0  1706k      0  0:07:05  0:05:29  0:01:36 1477k
 77  709M   77  550M    0     0  1704k      0  0:07:06  0:05:30  0:01:36 1247k
 77  709M   77  550M    0     0  1701k      0  0:07:06  0:05:31  0:01:35 1053k
 77  709M   77  551M    0     0  1699k      0  0:07:07  0:05:32  0:01:35  943k
 77  709M   77  552M    0     0  1696k      0  0:07:08  0:05:33  0:01:35  850k
 77  709M   77  553M    0     0  1692k      0  0:07:09  0:05:34  0:01:35  770k
 78  709M   78  553M    0     0  1689k      0  0:07:09  0:05:35  0:01:34  730k
 78  709M   78  554M    0     0  1686k      0  0:07:10  0:05:36  0:01:34  732k
 78  709M   78  555M    0     0  1685k      0  0:07:10  0:05:37  0:01:33  752k
 78  709M   78  556M    0     0  1683k      0  0:07:11  0:05:38  0:01:33  815k
 78  709M   78  557M    0     0  1681k      0  0:07:11  0:05:39  0:01:32  914k
 78  709M   78  558M    0     0  1679k      0  0:07:12  0:05:40  0:01:32 1012k
 78  709M   78  559M    0     0  1678k      0  0:07:12  0:05:41  0:01:31 1076k
 79  709M   79  560M    0     0  1675k      0  0:07:13  0:05:42  0:01:31 1056k
 79  709M   79  561M    0     0  1673k      0  0:07:13  0:05:43  0:01:30 1015k
 79  709M   79  562M    0     0  1670k      0  0:07:14  0:05:44  0:01:30  921k
 79  709M   79  562M    0     0  1667k      0  0:07:15  0:05:45  0:01:30  814k
 79  709M   79  563M    0     0  1664k      0  0:07:16  0:05:46  0:01:30  706k
 79  709M   79  563M    0     0  1660k      0  0:07:17  0:05:47  0:01:30  630k
 79  709M   79  564M    0     0  1658k      0  0:07:17  0:05:48  0:01:29  621k
 79  709M   79  565M    0     0  1656k      0  0:07:18  0:05:49  0:01:29  687k
 79  709M   79  566M    0     0  1654k      0  0:07:18  0:05:50  0:01:28  778k
 80  709M   80  567M    0     0  1652k      0  0:07:19  0:05:51  0:01:28  850k
 80  709M   80  568M    0     0  1651k      0  0:07:19  0:05:52  0:01:27  968k
 80  709M   80  569M    0     0  1649k      0  0:07:20  0:05:53  0:01:27 1076k
 80  709M   80  570M    0     0  1648k      0  0:07:20  0:05:54  0:01:26 1132k
 80  709M   80  572M    0     0  1648k      0  0:07:20  0:05:55  0:01:25 1193k
 80  709M   80  573M    0     0  1647k      0  0:07:20  0:05:56  0:01:24 1289k
 81  709M   81  575M    0     0  1647k      0  0:07:20  0:05:57  0:01:23 1375k
 81  709M   81  576M    0     0  1647k      0  0:07:20  0:05:58  0:01:22 1466k
 81  709M   81  578M    0     0  1647k      0  0:07:20  0:05:59  0:01:21 1552k
 81  709M   81  580M    0     0  1647k      0  0:07:20  0:06:00  0:01:20 1607k
 82  709M   82  581M    0     0  1648k      0  0:07:20  0:06:01  0:01:19 1708k
 82  709M   82  583M    0     0  1649k      0  0:07:20  0:06:02  0:01:18 1780k
 82  709M   82  585M    0     0  1648k      0  0:07:20  0:06:03  0:01:17 1743k
 82  709M   82  587M    0     0  1649k      0  0:07:20  0:06:04  0:01:16 1783k
 83  709M   83  589M    0     0  1650k      0  0:07:20  0:06:05  0:01:15 1851k
 83  709M   83  591M    0     0  1651k      0  0:07:19  0:06:06  0:01:13 1868k
 83  709M   83  592M    0     0  1651k      0  0:07:19  0:06:07  0:01:12 1827k
 83  709M   83  594M    0     0  1652k      0  0:07:19  0:06:08  0:01:11 1906k
 84  709M   84  596M    0     0  1653k      0  0:07:19  0:06:09  0:01:10 1954k
 84  709M   84  598M    0     0  1654k      0  0:07:18  0:06:10  0:01:08 1938k
 84  709M   84  599M    0     0  1653k      0  0:07:19  0:06:11  0:01:08 1786k
 84  709M   84  601M    0     0  1652k      0  0:07:19  0:06:12  0:01:07 1720k
 84  709M   84  602M    0     0  1652k      0  0:07:19  0:06:13  0:01:06 1645k
 85  709M   85  604M    0     0  1652k      0  0:07:19  0:06:14  0:01:05 1580k
 85  709M   85  606M    0     0  1653k      0  0:07:19  0:06:15  0:01:04 1585k
 85  709M   85  608M    0     0  1654k      0  0:07:18  0:06:16  0:01:02 1765k
 86  709M   86  610M    0     0  1656k      0  0:07:18  0:06:17  0:01:01 1949k
 86  709M   86  613M    0     0  1658k      0  0:07:17  0:06:18  0:00:59 2118k
 86  709M   86  615M    0     0  1661k      0  0:07:17  0:06:19  0:00:58 2333k
 87  709M   87  619M    0     0  1667k      0  0:07:15  0:06:20  0:00:55 2701k
 88  709M   88  624M    0     0  1676k      0  0:07:13  0:06:21  0:00:52 3276k
 88  709M   88  630M    0     0  1686k      0  0:07:10  0:06:22  0:00:48 4002k
 89  709M   89  635M    0     0  1696k      0  0:07:08  0:06:23  0:00:45 4593k
 90  709M   90  638M    0     0  1700k      0  0:07:06  0:06:24  0:00:42 4700k
 90  709M   90  642M    0     0  1705k      0  0:07:05  0:06:25  0:00:40 4636k
 91  709M   91  645M    0     0  1710k      0  0:07:04  0:06:26  0:00:38 4332k
 91  709M   91  649M    0     0  1715k      0  0:07:03  0:06:27  0:00:36 3889k
 92  709M   92  652M    0     0  1720k      0  0:07:02  0:06:28  0:00:34 3545k
 92  709M   92  656M    0     0  1726k      0  0:07:00  0:06:29  0:00:31 3669k
 93  709M   93  659M    0     0  1730k      0  0:06:59  0:06:30  0:00:29 3661k
 93  709M   93  662M    0     0  1731k      0  0:06:59  0:06:31  0:00:28 3363k
 93  709M   93  663M    0     0  1730k      0  0:06:59  0:06:32  0:00:27 2892k
 93  709M   93  664M    0     0  1729k      0  0:06:59  0:06:33  0:00:26 2429k
 93  709M   93  665M    0     0  1728k      0  0:07:00  0:06:34  0:00:26 1881k
 94  709M   94  667M    0     0  1727k      0  0:07:00  0:06:35  0:00:25 1495k
 94  709M   94  668M    0     0  1727k      0  0:07:00  0:06:36  0:00:24 1386k
 94  709M   94  670M    0     0  1726k      0  0:07:00  0:06:37  0:00:23 1412k
 94  709M   94  671M    0     0  1725k      0  0:07:00  0:06:38  0:00:22 1440k
 94  709M   94  673M    0     0  1725k      0  0:07:00  0:06:39  0:00:21 1523k
 95  709M   95  674M    0     0  1724k      0  0:07:00  0:06:40  0:00:20 1526k
 95  709M   95  676M    0     0  1724k      0  0:07:01  0:06:41  0:00:20 1516k
 95  709M   95  677M    0     0  1724k      0  0:07:01  0:06:42  0:00:19 1556k
 95  709M   95  679M    0     0  1724k      0  0:07:01  0:06:43  0:00:18 1602k
 96  709M   96  681M    0     0  1724k      0  0:07:01  0:06:44  0:00:17 1660k
 96  709M   96  683M    0     0  1725k      0  0:07:00  0:06:45  0:00:15 1788k
 96  709M   96  685M    0     0  1727k      0  0:07:00  0:06:46  0:00:14 1938k
 96  709M   96  687M    0     0  1727k      0  0:07:00  0:06:47  0:00:13 1988k
 97  709M   97  689M    0     0  1728k      0  0:07:00  0:06:48  0:00:12 2068k
 97  709M   97  691M    0     0  1729k      0  0:06:59  0:06:49  0:00:10 2108k
 97  709M   97  693M    0     0  1729k      0  0:06:59  0:06:50  0:00:09 2058k
 98  709M   98  695M    0     0  1730k      0  0:06:59  0:06:51  0:00:08 1989k
 98  709M   98  697M    0     0  1731k      0  0:06:59  0:06:52  0:00:07 2045k
 98  709M   98  699M    0     0  1732k      0  0:06:59  0:06:53  0:00:06 2080k
 99  709M   99  702M    0     0  1734k      0  0:06:58  0:06:54  0:00:04 2136k
 99  709M   99  704M    0     0  1736k      0  0:06:58  0:06:55  0:00:03 2295k
 99  709M   99  707M    0     0  1738k      0  0:06:57  0:06:56  0:00:01 2437k
 99  709M   99  709M    0     0  1738k      0  0:06:57  0:06:57 --:--:-- 2364k
100  709M  100  709M    0     0  1738k      0  0:06:57  0:06:57 --:--:-- 2381k
srt_objects <- list()

for (s in c(gsm_samples$samplenames, "hsb231", "hsb237", "hsb628")) {
  cat(paste0("Importing sample ", s, "\n"))
  matrix <- ReadMtx(mtx = paste0("matrices/", s, "_counts.mtx"), 
                    features = paste0("matrices/", s, "_genes.tsv"), feature.column = 1, 
                    cells = paste0("matrices/", s, "_barcodes.tsv"))
  metadata <- read.csv(paste0("matrices/", s, "_metadata.csv"), row.names = 1)
  srt_objects[[s]] <- CreateSeuratObject(counts = matrix, meta.data = metadata)
}
Importing sample CGE
Importing sample MGE
Importing sample LGE
Importing sample EC_Stream
Importing sample dEC
Importing sample H71
Importing sample H31
Importing sample H37
Importing sample H48-g1
Importing sample H48-g2
Importing sample H39-g1
Importing sample H39-g2
Importing sample H46-g1
Importing sample H46-g2
Importing sample H29-g1
Importing sample H29-g2
Importing sample H33-g1
Importing sample H33-g2
Importing sample hsb231
Importing sample hsb237
Importing sample hsb628

Merging samples in a single Seurat object

all.exp = merge(srt_objects[[1]], srt_objects[-1])

all.exp@meta.data$region = factor(all.exp@meta.data$region, region.levels)
all.exp@meta.data$age = factor(all.exp@meta.data$age, levels = age.levels)

log Normalization

all.exp@active.assay = "RNA"
all.exp = all.exp %>% 
              NormalizeData(assay = "RNA", 
                            verbose = F) %>% 
              FindVariableFeatures() %>% 
              ScaleData()
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Centering and scaling data matrix
  
VariableFeatures(all.exp@assays$RNA) = all.exp@assays$RNA@var.features[!(all.exp@assays$RNA@var.features %in% sex.genes)]


all.exp = all.exp %>% RunPCA(npcs = 50)
PC_ 1 
Positive:  NEAT1, B2M, IGFBP7, SLC1A3, CLDN5, ATP1A2, FLT1, MT2A, EPAS1, HLA-E 
       MECOM, VIM, LEF1, IFITM3, APOE, MYO10, CLEC3B, ID1, ABCG2, PREX2 
       ITM2A, FLI1, CST3, IFI27, ITPR2, FN1, ID3, MTUS1, CGNL1, ITIH5 
Negative:  RALYL, RYR2, KCNQ5, STXBP5L, KHDRBS2, LINGO2, FRMPD4, PTPRR, MIR137HG, GRM7 
       CNTNAP5, KCNB2, SNAP25, ZNF385B, HCN1, CHRM3, ASIC2, SV2B, CDH18, OLFM3 
       AL008633.1, CDH12, MLIP, ST6GALNAC5, GRM1, CACNG3, LINC01250, CNTN5, EPHA6, CHSY3 
PC_ 2 
Positive:  FLT1, CLDN5, COBLL1, MECOM, LEF1, ABCB1, ARHGAP29, ADGRF5, ABCG2, EGFL7 
       PODXL, ERG, EPAS1, SLC7A5, EBF1, JCAD, CLEC3B, PTPRB, ITIH5, PRKCH 
       PECAM1, IFI27, ITM2A, KLF2, ITGA1, VWF, LINC02147, ST8SIA6, FN1, TBX3 
Negative:  ERBB4, SOX2-OT, ST18, PLP1, TMEM144, UGT8, ZNF536, TF, SOX6, DOCK10 
       MBP, AL589740.1, MOBP, LINC00609, BCAS1, DOCK5, CRYAB, MOG, CNP, ANLN 
       CERCAM, CNDP1, ENPP2, LPAR1, SCD, LINC01608, NKX6-2, PLEKHH1, FA2H, CLDN11 
PC_ 3 
Positive:  ADGRV1, GLIS3, CFAP47, CFAP54, CFAP157, ID4, AQP4, DTHD1, ADGB, BMPR1B 
       AC104078.2, CFAP73, CFAP299, WDR49, TCTEX1D1, CFAP43, IQGAP2, DNAAF1, CFAP52, ARMC3 
       DCDC1, VWA3A, SPATA17, CCDC173, SPAG17, GFAP, STK33, LRRIQ1, LRRC9, TTC29 
Negative:  MBP, PLP1, ST18, MOBP, RNF220, SLC24A2, TF, ENPP2, TMEM144, UGT8 
       MOG, CNP, CLDN11, DOCK10, SPOCK3, AC012494.1, DBNDD2, ERMN, PLEKHH1, NKX6-2 
       DOCK5, C10orf90, LINC01608, MAG, FRMD4B, CNDP1, CDK18, ANLN, SLCO1A2, OPALIN 
PC_ 4 
Positive:  GAD1, DLX6-AS1, NXPH1, GAD2, GRIK1, LHFPL3, ADARB2, ZNF385D, VWC2, ERBB4 
       IGF1, AC068308.1, SOX4, AC125613.1, MAF, SOX11, ST8SIA4, KIF26B, PTCHD4, KCNC2 
       SLC6A1-AS1, ELAVL2, FSTL5, ZNF804A, AC117461.1, SLC6A1, EGFR, SOX6, SDK1, PTPRM 
Negative:  CFAP157, DNAAF1, CFAP299, DTHD1, ADGB, CFAP73, AC104078.2, DNAH12, PLP1, CFAP52 
       ST18, MOBP, RNF220, CFAP43, TCTEX1D1, TTC29, ENPP2, TMEM144, ARMC3, TF 
       CAPS, SLC47A2, ROPN1L, PEX5L, RSPH1, MBP, WDR63, LINC02416, SPAG8, MOG 
PC_ 5 
Positive:  ERBB4, GAD1, SLC6A1, NXPH1, ADARB2, SOX2-OT, GAD2, DLX6-AS1, SLC6A1-AS1, ZNF536 
       GRIK1, SPOCK3, VWC2, LHFPL3, ZNF385D, KCNMB2-AS1, KCNC2, SOX6, PLD5, SHISA6 
       BTBD11, PTCHD4, AC125613.1, RBMS3-AS3, FSTL5, ALK, THSD7A, SYNPR, LINC00200, KIF26B 
Negative:  ADAM28, DOCK8, APBB1IP, CSF1R, TBXAS1, PTPRC, FYB1, SLC11A1, LNCAROD, SYK 
       RUNX1, TLR2, CSF3R, MS4A7, RBM47, C3, SAMSN1, AL163541.1, AC131944.1, CSF2RA 
       IKZF1, CD86, SLC2A5, CD74, INPP5D, C1QB, MSR1, LRMDA, CPVL, RGS1 
all.exp = all.exp %>% 
                  RunUMAP(dims = 1:22) %>% 
                  FindNeighbors(dims = 1:22) %>%
                  FindClusters(resolution = c(0.8, seq(0.5, 2, 0.5)))
Warning: The default method for RunUMAP has changed from calling Python UMAP via reticulate to the R-native UWOT using the cosine metric
To use Python UMAP via reticulate, set umap.method to 'umap-learn' and metric to 'correlation'
This message will be shown once per session14:33:42 UMAP embedding parameters a = 0.9922 b = 1.112
14:33:42 Read 124917 rows and found 22 numeric columns
14:33:42 Using Annoy for neighbor search, n_neighbors = 30
14:33:42 Building Annoy index with metric = cosine, n_trees = 50
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
14:33:58 Writing NN index file to temp file /tmp/RtmpH6686P/filee354748b0334b
14:33:58 Searching Annoy index using 80 threads, search_k = 3000
14:34:00 Annoy recall = 100%
14:34:01 Commencing smooth kNN distance calibration using 80 threads with target n_neighbors = 30
14:34:05 Initializing from normalized Laplacian + noise (using irlba)
14:34:30 Commencing optimization for 200 epochs, with 5654058 positive edges
Using method 'umap'
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
14:35:37 Optimization finished
Computing nearest neighbor graph
Computing SNN
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 124917
Number of edges: 4505161

Running Louvain algorithm...
Maximum modularity in 10 random starts: 0.9526
Number of communities: 44
Elapsed time: 39 seconds
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 124917
Number of edges: 4505161

Running Louvain algorithm...
Maximum modularity in 10 random starts: 0.9633
Number of communities: 34
Elapsed time: 37 seconds
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 124917
Number of edges: 4505161

Running Louvain algorithm...
Maximum modularity in 10 random starts: 0.9471
Number of communities: 50
Elapsed time: 38 seconds
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 124917
Number of edges: 4505161

Running Louvain algorithm...
Maximum modularity in 10 random starts: 0.9349
Number of communities: 59
Elapsed time: 44 seconds
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 124917
Number of edges: 4505161

Running Louvain algorithm...
Maximum modularity in 10 random starts: 0.9240
Number of communities: 69
Elapsed time: 38 seconds

Overview FeaturePlots

FeaturePlot(all.exp, c("GFAP", "HOPX", "TOP2A", "EOMES", "DCX", "TBR1", "SLC17A7", "GAD2", "LHX6", "NR2F2", "PROX1", "CALB2", "LAMP5", "RELN", "VIP", "NPY", "SST", "OLIG2", "SOX10",  "MBP", "FOXJ1", "PECAM1", "PDGFRB", "ADAM28"), order = F, raster = F, ncol = 6) &
  simple &
  mysc & 
  coord_fixed()
Scale for colour is already present.
Adding another scale for colour, which will replace the existing scale.Scale for colour is already present.
Adding another scale for colour, which will replace the existing scale.Scale for colour is already present.
Adding another scale for colour, which will replace the existing scale.Scale for colour is already present.
Adding another scale for colour, which will replace the existing scale.Scale for colour is already present.
Adding another scale for colour, which will replace the existing scale.Scale for colour is already present.
Adding another scale for colour, which will replace the existing scale.Scale for colour is already present.
Adding another scale for colour, which will replace the existing scale.Scale for colour is already present.
Adding another scale for colour, which will replace the existing scale.Scale for colour is already present.
Adding another scale for colour, which will replace the existing scale.Scale for colour is already present.
Adding another scale for colour, which will replace the existing scale.Scale for colour is already present.
Adding another scale for colour, which will replace the existing scale.Scale for colour is already present.
Adding another scale for colour, which will replace the existing scale.Scale for colour is already present.
Adding another scale for colour, which will replace the existing scale.Scale for colour is already present.
Adding another scale for colour, which will replace the existing scale.Scale for colour is already present.
Adding another scale for colour, which will replace the existing scale.Scale for colour is already present.
Adding another scale for colour, which will replace the existing scale.Scale for colour is already present.
Adding another scale for colour, which will replace the existing scale.Scale for colour is already present.
Adding another scale for colour, which will replace the existing scale.Scale for colour is already present.
Adding another scale for colour, which will replace the existing scale.Scale for colour is already present.
Adding another scale for colour, which will replace the existing scale.Scale for colour is already present.
Adding another scale for colour, which will replace the existing scale.Scale for colour is already present.
Adding another scale for colour, which will replace the existing scale.Scale for colour is already present.
Adding another scale for colour, which will replace the existing scale.Scale for colour is already present.
Adding another scale for colour, which will replace the existing scale.
ggsave("all.exp_featplots.png", width = 10, height = 6, scale = 2)

Overview Plots

Main Cell Types

DimPlot(all.exp, raster = F, label = T, repel = T, group.by = "all.exp_type", shuffle = T) +
  coord_fixed() +
  simple +
  labs(title = "Cell Types")

Unsupervised Clustering

DimPlot(all.exp, raster = F, label = T, group.by = "RNA_snn_res.1", shuffle = T) + 
  coord_fixed() + 
  simple+
  scale_color_manual(values = met.brewer("VanGogh2", n = 50, override.order = T))+ 
  labs(title = "Unsupervised Clustering")

Donor Age

DimPlot(all.exp, raster = F, label = F, group.by = "age", shuffle = T) + 
  coord_fixed() + 
  NoAxes() + 
  scale_color_viridis_d(option = "H", name = "Donor Age")+ 
  labs(title = NULL)

Donor Age Group

DimPlot(all.exp, raster = F, label = F, group.by = "age_group", shuffle = T) + 
  coord_fixed() + 
  NoAxes() + 
  scale_color_manual(values=met.brewer("Hokusai3"), name = "Donor Age Group")+ 
  labs(title = NULL)

Sample ID

DimPlot(all.exp, raster = F, label = F, group.by = "sample", shuffle = T) + 
  coord_fixed() + 
  NoAxes() +
  scale_color_manual(values=met.brewer("Juarez", 16), name = "Sample")+ 
  labs(title = NULL)

Sample Origin

DimPlot(all.exp, raster = F, label = F, group.by = "region", shuffle = T) + 
  coord_fixed() + 
  NoAxes() +
  scale_color_manual(name = "Sample Origin", values = region.pal) + 
  labs(title = NULL)

EC Stream Cells

DimPlot(all.exp, group.by = "stream_highlight", order = T, raster = F) + 
  scale_color_manual(values = (region.pal)[3], na.value = "grey85", labels = c("EC Stream (14d)", "Other cells")) +
  coord_fixed() +
  NoAxes() + 
  labs(title = "EC Stream Cells")

Nuclear Fraction

FeaturePlot(all.exp, "nuclear_fraction", order = T, raster = F) +
  scale_color_viridis(limits = c(0, 1), name = "Nuclear Fraction") +
  coord_fixed() +
  NoAxes() +
  labs(title = NULL)
Scale for colour is already present.
Adding another scale for colour, which will replace the existing scale.

Saving all.exp

Idents(all.exp) = "all.exp_type"
all.exp <- BuildClusterTree(all.exp, assay = "RNA", reorder = T, features = all.exp@assays$RNA@var.features)
Reordering identity classes and rebuilding tree
saveRDS(all.exp, file = "all.exp.rds", compress = F)

Subsetting interneurons

inter.exp.cells = all.exp@meta.data %>% filter(all.exp_type == "Cortical Interneurons") %>% rownames()
DimPlot(all.exp, label = T, cells.highlight = inter.exp.cells, raster = F) + simple + coord_fixed()


inter.exp = subset(all.exp, cells = inter.exp.cells)

load("reorder_index.Rdata") # load the index for reordering the cells. In addition to using the same seed (42, the default ones in Seurat), in order to reproduce the exact same PCA results and UMAP projection, our count matrices should be in the same order as the original ones. For the sake of reproducibility, we will reorder the cells.

inter.exp@assays$RNA@counts <- inter.exp@assays$RNA@counts[ , reorder_index]
inter.exp@assays$RNA@data <- inter.exp@assays$RNA@data[ , reorder_index]

logNormalization

inter.exp@active.assay = "RNA"

inter.exp = inter.exp %>% 
              NormalizeData(assay = "RNA", 
                            verbose = F) %>% 
              FindVariableFeatures() %>% 
              ScaleData(features = rownames(.))
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Centering and scaling data matrix
VariableFeatures(inter.exp@assays$RNA) = inter.exp@assays$RNA@var.features[!(inter.exp@assays$RNA@var.features %in% sex.genes)]

inter.exp@active.assay = "RNA"
inter.exp = inter.exp %>% RunPCA(npcs = 20) %>% 
                          RunUMAP(dims = 1:8) %>%
                          FindNeighbors(dims = 1:8) %>%
                          FindClusters(resolution = c(0.8, seq(0.5, 2, 0.5)))
PC_ 1 
Positive:  CASC15, SOX4, SOX11, SYNE2, SOX2-OT, ZBTB20, CHD7, AC125613.1, HBG2, NBAT1 
       KCNH8, VIM, AC068308.1, CECR2, RPS11, DLEU2, NHSL1, SPP1, AC061958.1, HBA2 
       AC090531.1, RFTN2, HBA1, PDZRN4, ZBTB20-AS5, HBG1, NKAIN3, HIST1H2AC, VCAN-AS1, ENO4 
Negative:  CSMD1, OXR1, AGBL4, KCNC2, PCLO, LRRC4C, ZNF385D, ASTN2, SPOCK3, LRP1B 
       ATP1B1, GALNTL6, PLCB1, RYR2, GRIK1, CHRM3, KCND2, CADM2, CDH9, MT-CO2 
       LINC-PINT, PTPRG, HCN1, MCTP1, KCTD16, KHDRBS2, LRRTM4, RASGRF2, PEG3, PTPRM 
PC_ 2 
Positive:  SOX6, KIAA1217, SATB1, SATB1-AS1, PLCH1, GPC6, PRKG1, GRIK3, MYO5B, ST6GALNAC5 
       TENM1, RSPO2, RASGRF2, RAPGEF5, GRIA3, KLHL5, CRHBP, SPARCL1, WLS, PAWR 
       SLIT2, TAC1, ELAVL2, HGF, XYLT1, MMP16, ST8SIA4, CNTNAP3B, ENOX1, PTCHD4 
Negative:  ADARB2, DSCAM, PROX1, KCNT2, DOCK10, AC013265.1, VIP, CALB2, LINGO2, GALNT13 
       CXCL14, PDE3A, LAMA3, CCK, ADRA1B, AL391832.4, EGFR, CNR1, LINC00200, CRH 
       ARPP21, SORCS3, PRR16, CCDC85A, CCNH, SEZ6L, PCSK2, THSD7A, FSTL5, INPP4B 
PC_ 3 
Positive:  EYA4, LINC00299, LAMP5, KIT, SV2C, TRPC3, FBXL7, FGF13, AC132803.1, SGK1 
       PRELID2, TMEM132D, CACNA2D1, MYO16, UNC5C, NTNG1, PTPRT, ALK, HAPLN1, PDGFD 
       AC137770.1, PDZD2, TPD52L1, GRIN2A, LINC01344, LINC00298, GRIA4, SGCZ, CHST9, POU6F2 
Negative:  ROBO1, CACNA2D3, NELL1, CDH10, SYNPR, PDE4B, KCNMB2-AS1, GRM1, VIP, GRID2 
       AC091885.2, AC013265.1, AC090579.1, RGS6, TRHDE, OXR1, AC117461.1, ROBO2, CHST15, GRM7 
       CALB2, KIAA1217, CNTN3, ASIC2, OLFM3, GRIK3, ASIC4, CHRM3, SHISA6, CHRNA2 
PC_ 4 
Positive:  SLC8A1-AS1, AC023590.1, CHRM3-AS2, ARL17A, AC005064.1, AC073525.1, AL353784.1, AC005400.1, CTNNA3, AC098617.1 
       RFX4, GRM5-AS1, AC016042.1, AL390783.1, AL137009.1, AC016642.1, LINC00200, AC027288.3, TTN, AC096576.3 
       AC096576.2, GRIK1-AS1, FILIP1L, RBMS3-AS3, SCN1A-AS1, FGF12-AS1, GNG12-AS1, AC010974.2, AC092939.1, AP001825.1 
Negative:  MT-ATP6, MT-ND4, MT-CO2, MT-ND1, MT-CO3, MT-CYB, MT-ND3, MT-ND2, BTBD11, AC006148.1 
       ZNF804A, STXBP5-AS1, MT-ATP8, LINC-PINT, MT-CO1, PEG3, ASIC2, TMEM132C, MT-ND5, MT-ND4L 
       RGS5, NDST3, ALDOC, PLCXD3, CNTNAP3B, TAFA2, CPLX1, LRP1B, OXR1, TRPC4 
PC_ 5 
Positive:  DPP10-AS3, AC093610.1, DPP10, DPP10-AS1, ZNF804A, PLXNA4, ZPBP, CNTNAP3B, TAFA4, TMEM132C 
       TAFA2, SCN1A-AS1, AP003464.1, CPED1, ADAMTS17, COL12A1, AC073525.1, NDST3, AC139720.1, EDIL3 
       C1QL1, AC016042.1, SLC9A9, LRRC4C, BTBD11, HS6ST3, PPARGC1A, PLCL1, AC090138.1, TRPC4 
Negative:  RALYL, CACNA2D3, TRHDE, NETO1, ROBO2, GRM1, GRID2, PDE1A, GRIK1, RELN 
       SYNPR, UNC13C, ROBO1, GRIN3A, MAN1A1, SST, SLC8A1, PDE8B, CDH8, PAWR 
       SHISA6, RGS6, TMTC2, TMEFF2, MTUS2, COL25A1, PDE1C, MAP3K5, GRIN2A, KLF5 
14:50:27 UMAP embedding parameters a = 0.9922 b = 1.112
14:50:27 Read 20470 rows and found 8 numeric columns
14:50:27 Using Annoy for neighbor search, n_neighbors = 30
14:50:27 Building Annoy index with metric = cosine, n_trees = 50
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
14:50:29 Writing NN index file to temp file /tmp/RtmpH6686P/filee3547188875cc
14:50:29 Searching Annoy index using 80 threads, search_k = 3000
14:50:29 Annoy recall = 100%
14:50:31 Commencing smooth kNN distance calibration using 80 threads with target n_neighbors = 30
14:50:33 Initializing from normalized Laplacian + noise (using irlba)
14:50:34 Commencing optimization for 200 epochs, with 829100 positive edges
Using method 'umap'
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
14:50:43 Optimization finished
Computing nearest neighbor graph
Computing SNN
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 20470
Number of edges: 643223

Running Louvain algorithm...
Maximum modularity in 10 random starts: 0.8926
Number of communities: 21
Elapsed time: 2 seconds
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 20470
Number of edges: 643223

Running Louvain algorithm...
Maximum modularity in 10 random starts: 0.9126
Number of communities: 14
Elapsed time: 2 seconds
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 20470
Number of edges: 643223

Running Louvain algorithm...
Maximum modularity in 10 random starts: 0.8819
Number of communities: 24
Elapsed time: 2 seconds
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 20470
Number of edges: 643223

Running Louvain algorithm...
Maximum modularity in 10 random starts: 0.8592
Number of communities: 28
Elapsed time: 2 seconds
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 20470
Number of edges: 643223

Running Louvain algorithm...
Maximum modularity in 10 random starts: 0.8405
Number of communities: 37
Elapsed time: 2 seconds
Idents(inter.exp) = "RNA_snn_res.0.5"
inter.exp = BuildClusterTree(inter.exp, 
                             dims = 1:8, 
                             assay = "RNA", 
                             reorder = T, 
                             features = inter.exp@assays$RNA@var.features)

  |                                                  | 0 % ~calculating  
  |++++                                              | 7 % ~01s          
  |++++++++                                          | 14% ~00s          
  |+++++++++++                                       | 21% ~00s          
  |+++++++++++++++                                   | 29% ~00s          
  |++++++++++++++++++                                | 36% ~00s          
  |++++++++++++++++++++++                            | 43% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |+++++++++++++++++++++++++++++                     | 57% ~00s          
  |+++++++++++++++++++++++++++++++++                 | 64% ~00s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Reordering identity classes and rebuilding tree

  |                                                  | 0 % ~calculating  
  |++++                                              | 7 % ~00s          
  |++++++++                                          | 14% ~00s          
  |+++++++++++                                       | 21% ~00s          
  |+++++++++++++++                                   | 29% ~00s          
  |++++++++++++++++++                                | 36% ~00s          
  |++++++++++++++++++++++                            | 43% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |+++++++++++++++++++++++++++++                     | 57% ~00s          
  |+++++++++++++++++++++++++++++++++                 | 64% ~00s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
inter.exp@meta.data$RNA_snn_res.0.5 = factor(inter.exp@meta.data$RNA_snn_res.0.5 , levels = inter.exp@tools$BuildClusterTree$tip.label)

inter.exp@reductions$umap@cell.embeddings[, "UMAP_1"] = inter.exp@reductions$umap@cell.embeddings[, "UMAP_1"] * -1 #Inverting the x axis so we can have more intuitive visualizations, with maturation going from left to right.

Overview Plots

DimPlot(inter.exp, label = T, group.by = "RNA_snn_res.0.5") + 
  scale_color_manual(values = met.brewer("VanGogh2", length(levels(inter.exp$RNA_snn_res.0.5)))) + 
  simple + 
  coord_fixed() + 
  labs(title = "Unsupervised Clustering")

DimPlot(inter.exp, label = F, group.by = "age", shuffle = T) + 
  coord_fixed() + 
  NoAxes() + 
  scale_color_viridis_d(name = "Age", option = "H")+ 
  labs(title = NULL)

DimPlot(inter.exp, label = F, group.by = "age_group", shuffle = T) + 
  coord_fixed() + 
  NoAxes() + 
  #scale_color_viridis_d()
  scale_color_manual(values=met.brewer("Hokusai3"))+ 
  labs(title = NULL)

DimPlot(inter.exp, label = F, group.by = "sample", shuffle = T) + 
  coord_fixed() + 
  NoAxes() +
  scale_color_manual(values=met.brewer("Juarez", 16))+ 
  labs(title = NULL)

DimPlot(inter.exp, raster = F, label = F, group.by = "region", shuffle = T) + 
  coord_fixed() + 
  NoAxes() +
  scale_color_manual(name = "Region of Origin", values = region.pal)+ 
  labs(title = NULL)

DimPlot(inter.exp, group.by = "stream_highlight", order = T) + 
   scale_color_manual(values = (region.pal)[3], na.value = "grey85") +
  coord_fixed() +
  NoAxes()+ 
  labs(title = "EC Stream Cells")

DimPlot(inter.exp, group.by = "dec_highlight", order = T) +
  scale_color_manual(values = (region.pal)[2], na.value = "grey85") +
  coord_fixed() +
  NoAxes()+ 
  labs(title = "Embryonic EC Cells")

inter.exp@active.assay = "RNA"
(FeaturePlot(inter.exp, c("GFAP", "TNC",  "SOX2", "TOP2A",  "OLIG2", "SOX10", "DCX", "GABRB2", "LHX6", "NR2F2", "PROX1", "PBX3", "SST", "PVALB", "NPY",  "CALB2", "VIP", "RELN", "KIT",  "LAMP5", "TBR1", "SLC17A7", "ADAM28", "PECAM1"), order = T, ncol = 6) &
  simple &
  mysc & 
  coord_fixed() &
  theme(text = element_text(family = "Helvetica")))
Scale for colour is already present.
Adding another scale for colour, which will replace the existing scale.Scale for colour is already present.
Adding another scale for colour, which will replace the existing scale.Scale for colour is already present.
Adding another scale for colour, which will replace the existing scale.Scale for colour is already present.
Adding another scale for colour, which will replace the existing scale.Scale for colour is already present.
Adding another scale for colour, which will replace the existing scale.Scale for colour is already present.
Adding another scale for colour, which will replace the existing scale.Scale for colour is already present.
Adding another scale for colour, which will replace the existing scale.Scale for colour is already present.
Adding another scale for colour, which will replace the existing scale.Scale for colour is already present.
Adding another scale for colour, which will replace the existing scale.Scale for colour is already present.
Adding another scale for colour, which will replace the existing scale.Scale for colour is already present.
Adding another scale for colour, which will replace the existing scale.Scale for colour is already present.
Adding another scale for colour, which will replace the existing scale.Scale for colour is already present.
Adding another scale for colour, which will replace the existing scale.Scale for colour is already present.
Adding another scale for colour, which will replace the existing scale.Scale for colour is already present.
Adding another scale for colour, which will replace the existing scale.Scale for colour is already present.
Adding another scale for colour, which will replace the existing scale.Scale for colour is already present.
Adding another scale for colour, which will replace the existing scale.Scale for colour is already present.
Adding another scale for colour, which will replace the existing scale.Scale for colour is already present.
Adding another scale for colour, which will replace the existing scale.Scale for colour is already present.
Adding another scale for colour, which will replace the existing scale.Scale for colour is already present.
Adding another scale for colour, which will replace the existing scale.Scale for colour is already present.
Adding another scale for colour, which will replace the existing scale.Scale for colour is already present.
Adding another scale for colour, which will replace the existing scale.Scale for colour is already present.
Adding another scale for colour, which will replace the existing scale.

#ggsave("inter.exp_overview_featplots.png", height = 14, width = 28)

Saving inter.exp

saveRDS(inter.exp, "inter.exp_step1.rds", compress = F)

These were the processing steps to generate the basic datasets used in the paper: all.exp and inter.exp

sessionInfo()
R version 4.2.3 (2023-03-15)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 22.04.3 LTS

Matrix products: default
BLAS:   /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3
LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.20.so

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C               LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8     LC_MONETARY=en_US.UTF-8   
 [6] LC_MESSAGES=en_US.UTF-8    LC_PAPER=en_US.UTF-8       LC_NAME=C                  LC_ADDRESS=C               LC_TELEPHONE=C            
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] grid      stats4    stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] NatParksPalettes_0.2.0      MetBrewer_0.2.0             GEOquery_2.66.0             ComplexHeatmap_2.14.0      
 [5] future_1.32.0               DropletUtils_1.18.1         SingleCellExperiment_1.20.1 SummarizedExperiment_1.28.0
 [9] Biobase_2.58.0              GenomicRanges_1.50.2        GenomeInfoDb_1.34.9         IRanges_2.32.0             
[13] S4Vectors_0.36.2            BiocGenerics_0.44.0         MatrixGenerics_1.10.0       matrixStats_1.0.0          
[17] patchwork_1.1.2             viridis_0.6.3               viridisLite_0.4.2           SeuratObject_4.1.3         
[21] Seurat_4.3.0.1              lubridate_1.9.2             forcats_1.0.0               stringr_1.5.0              
[25] dplyr_1.1.2                 purrr_1.0.1                 readr_2.1.4                 tidyr_1.3.0                
[29] tibble_3.2.1                ggplot2_3.4.2               tidyverse_2.0.0            

loaded via a namespace (and not attached):
  [1] utf8_1.2.3                spatstat.explore_3.2-1    reticulate_1.30           R.utils_2.12.2            tidyselect_1.2.0         
  [6] htmlwidgets_1.6.2         BiocParallel_1.32.6       Rtsne_0.16                munsell_0.5.0             ragg_1.2.5               
 [11] codetools_0.2-19          ica_1.0-3                 miniUI_0.1.1.1            withr_2.5.0               spatstat.random_3.1-5    
 [16] colorspace_2.1-0          progressr_0.13.0          knitr_1.43                rstudioapi_0.14           ROCR_1.0-11              
 [21] tensor_1.5                listenv_0.9.0             labeling_0.4.2            GenomeInfoDbData_1.2.9    polyclip_1.10-4          
 [26] farver_2.1.1              rhdf5_2.42.1              parallelly_1.36.0         vctrs_0.6.3               generics_0.1.3           
 [31] xfun_0.39                 timechange_0.2.0          R6_2.5.1                  doParallel_1.0.17         clue_0.3-64              
 [36] locfit_1.5-9.8            cachem_1.0.8              bitops_1.0-7              rhdf5filters_1.10.1       spatstat.utils_3.0-3     
 [41] DelayedArray_0.24.0       promises_1.2.0.1          scales_1.2.1              gtable_0.3.3              beachmat_2.14.2          
 [46] globals_0.16.2            goftest_1.2-3             rlang_1.1.1               systemfonts_1.0.4         GlobalOptions_0.1.2      
 [51] splines_4.2.3             lazyeval_0.2.2            spatstat.geom_3.2-1       yaml_2.3.7                reshape2_1.4.4           
 [56] abind_1.4-5               httpuv_1.6.11             tools_4.2.3               ellipsis_0.3.2            jquerylib_0.1.4          
 [61] RColorBrewer_1.1-3        ggridges_0.5.4            Rcpp_1.0.10               plyr_1.8.8                sparseMatrixStats_1.10.0 
 [66] zlibbioc_1.44.0           RCurl_1.98-1.12           deldir_1.0-9              pbapply_1.7-2             GetoptLong_1.0.5         
 [71] cowplot_1.1.1             zoo_1.8-12                ggrepel_0.9.3             cluster_2.1.4             magrittr_2.0.3           
 [76] data.table_1.14.8         scattermore_1.2           circlize_0.4.15           lmtest_0.9-40             RANN_2.6.1               
 [81] fitdistrplus_1.1-11       hms_1.1.3                 mime_0.12                 evaluate_0.21             xtable_1.8-4             
 [86] gridExtra_2.3             shape_1.4.6               compiler_4.2.3            KernSmooth_2.23-20        crayon_1.5.2             
 [91] R.oo_1.25.0               htmltools_0.5.5           later_1.3.1               tzdb_0.3.0                MASS_7.3-58.2            
 [96] Matrix_1.5-3              cli_3.6.1                 R.methodsS3_1.8.2         parallel_4.2.3            igraph_1.5.0             
[101] pkgconfig_2.0.3           sp_2.0-0                  plotly_4.10.2             scuttle_1.8.4             spatstat.sparse_3.0-2    
[106] xml2_1.3.4                foreach_1.5.2             bslib_0.5.0               dqrng_0.3.0               XVector_0.38.0           
[111] digest_0.6.32             sctransform_0.3.5         RcppAnnoy_0.0.20          spatstat.data_3.0-1       rmarkdown_2.22           
[116] leiden_0.4.3              uwot_0.1.16               edgeR_3.42.2              DelayedMatrixStats_1.20.0 shiny_1.7.4              
[121] rjson_0.2.21              lifecycle_1.0.3           nlme_3.1-162              jsonlite_1.8.7            Rhdf5lib_1.20.0          
[126] limma_3.54.2              fansi_1.0.4               pillar_1.9.0              lattice_0.20-45           fastmap_1.1.1            
[131] httr_1.4.6                survival_3.5-3            glue_1.6.2                png_0.1-8                 iterators_1.0.14         
[136] sass_0.4.6                stringi_1.7.12            HDF5Array_1.26.0          textshaping_0.3.6         ape_5.7-1                
[141] irlba_2.3.5.1             future.apply_1.11.0      
LS0tCnRpdGxlOiAiTWVyZ2luZyBzYW1wbGVzIgpzdWJ0aXRsZTogIk5hc2NpbWVudG8gKyBGcmFuamljIC8vIFNvdXBYL0RvdWJsZXRGaW5kZXIvRHJvcGxldFFDIFBpcGVsaW5lIgphdXRob3I6ICJNYXJjb3MgTmFzY2ltZW50byIKZGF0ZTogIjAxLzAyLzIwMjQiCm91dHB1dDogaHRtbF9ub3RlYm9vawotLS0KYGBge3IgU2V0dXB9CiMgTG9hZGluZyBuZWNlc3NhcnkgbGlicmFyaWVzCmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KFNldXJhdCkKbGlicmFyeSh2aXJpZGlzKQpsaWJyYXJ5KHBhdGNod29yaykKbGlicmFyeShEcm9wbGV0VXRpbHMpCmxpYnJhcnkoZnV0dXJlKQpsaWJyYXJ5KHRpYmJsZSkKbGlicmFyeShDb21wbGV4SGVhdG1hcCkKbGlicmFyeShHRU9xdWVyeSkKCiMgQWRkaXRpb25hbCBjb2xvciBzY2FsZXMKbGlicmFyeShNZXRCcmV3ZXIpCmxpYnJhcnkoTmF0UGFya3NQYWxldHRlcykKCiMgUGFyYWxsZWwgcHJvY2Vzc2luZyBzZXR1cApwbGFuKCJtdWx0aWNvcmUiLCB3b3JrZXJzID0gODApCm9wdGlvbnMoZnV0dXJlLmdsb2JhbHMubWF4U2l6ZSA9IDMwICogMTAyNF4zKSAjIDMwIEdCCgojIEN1c3RvbSB0aGVtZXMgYW5kIHNjYWxlcyBmb3IgcGxvdHMKbXl0aGVtZSA8LSB0aGVtZV9taW5pbWFsKCkgKyAKICB0aGVtZShheGlzLmxpbmUgPSBlbGVtZW50X2xpbmUoKSwKICAgICAgICBheGlzLnRpY2tzID0gZWxlbWVudF9saW5lKCksCiAgICAgICAgdGV4dCA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSAiSGVsdmV0aWNhIikpCgpzaW1wbGUgPC0gTm9BeGVzKCkgKyBOb0xlZ2VuZCgpCm15c2MgPC0gc2NhbGVfY29sb3JfdmlyaWRpcyhvcHRpb24gPSAiQSIpCnJlZ2lvbi5wYWwgPC0gYygiIzVFQkZBMiIsICIjRjY5NjYzIiwgIiM3MzFERDgiLCAgIiNGQjdDN0UiKQoKIyBMaXN0IG9mIHNleC1zcGVjaWZpYyBnZW5lcwpzZXguZ2VuZXMgPC0gYygiVFRUWTE0IiwgIk5MR040WSIsICJVU1A5WSIsICJVVFkiLCAiWElTVCIsICJSUFM0WCIsICJUTVNCNFgiLCAiVFNJWCIpCgojbGV2ZWxzIGZvciBzb21lIG1ldGFkYXRhIGNhdGVnb3JpZXM6CmFnZS5sZXZlbHMgPC0gYygiMjNHVyIsICIxNGQiLCAiMzNkIiwgIjU0ZCIsICIyeSIsICIzeSIsICIxM3kiLCAiMjd5IiwgIjUweSIsICI1MXkiLCAiNzl5IikKYWdlLmdyb3VwLmxldmVscyA8LSBjKCJGZXRhbCAoMjNHVykiLCAiSW5mYW50ICgxNGQtNTRkKSIsICJUb2RkbGVyICgyeS0zeSkiLCAiVGVlbiAoMTN5KSIsICJBZHVsdCAoMjd5LTc5eSkiKQpyZWdpb24ubGV2ZWxzIDwtIGMoIkdlcm1pbmFsIFpvbmUiLCAiRW1icnlvbmljIEVDIiwgIk1pZ3JhdG9yeSBTdHJlYW0iLCAiUG9zdG5hdGFsIEVDIikKYGBgCgojQ3JlYXRpbmcgc2V1cmF0IG9iamVjdHMgZnJvbSBjb3VudCBtYXRyaWNlcyAKQ291bnQgbWF0cmljZXMgYW5kIG1ldGFkYXRhIGFyZSBkb3dubG9hZGVkIGZyb20gR0VPIGFuZCBzYXZlZCBpbiBhIGZvbGRlciBuYW1lZCAibWF0cmljZXMiLgpgYGB7cn0KbG9hZCgiZ3NtX3NhbXBsZXMuUkRhdGEiKQoKZGlyLmNyZWF0ZSgibWF0cmljZXMiKQoKZm9yIChzIGluIDE6bnJvdyhnc21fc2FtcGxlcykpIHsKcHJpbnQocGFzdGUoIkRvd25sb2FkaW5nIGNvdW50IG1hdHJpY2VzLiBTYW1wbGUiLCBzLCAib2YiLCBucm93KGdzbV9zYW1wbGVzKSkpCiAgICAKZ3NtX3VybCA8LSBwYXN0ZTAoImh0dHBzOi8vd3d3Lm5jYmkubmxtLm5paC5nb3YvZ2VvL2Rvd25sb2FkLz9hY2M9IiwgZ3NtX3NhbXBsZXMkZ3NtW3NdLCAiJmZvcm1hdD1maWxlJmZpbGU9IiwgZ3NtX3NhbXBsZXMkZ3NtW3NdLCAiJTVGIiwgZ3NtX3NhbXBsZXMkc2FtcGxlbmFtZXNbc10pCmJhcmNvZGVzX3VybCA8LSBwYXN0ZTAoZ3NtX3VybCwgIiU1RmJhcmNvZGVzJTJFdHN2JTJFZ3oiKQpjb3VudHNfdXJsIDwtIHBhc3RlMChnc21fdXJsLCAiJTVGY291bnRzJTJFbXR4JTJFZ3oiKQpnZW5lc191cmwgPC0gcGFzdGUwKGdzbV91cmwsICIlNUZnZW5lcyUyRXRzdiUyRWd6IikKbWV0YWRhdGFfdXJsIDwtIHBhc3RlMChnc21fdXJsLCAiJTVGbWV0YWRhdGElMkVjc3YlMkVneiIpCgpkb3dubG9hZC5maWxlKGJhcmNvZGVzX3VybCwgbWV0aG9kID0gImN1cmwiLCBwYXN0ZTAoIm1hdHJpY2VzLyIsIGdzbV9zYW1wbGVzJHNhbXBsZW5hbWVzW3NdLCAiX2JhcmNvZGVzLnRzdi5neiIpKQpkb3dubG9hZC5maWxlKGNvdW50c191cmwsIG1ldGhvZCA9ICJjdXJsIiwgcGFzdGUwKCJtYXRyaWNlcy8iLCBnc21fc2FtcGxlcyRzYW1wbGVuYW1lc1tzXSwgIl9jb3VudHMubXR4Lmd6IikpCmRvd25sb2FkLmZpbGUoZ2VuZXNfdXJsLCBtZXRob2QgPSAiY3VybCIsIHBhc3RlMCgibWF0cmljZXMvIiwgZ3NtX3NhbXBsZXMkc2FtcGxlbmFtZXNbc10sICJfZ2VuZXMudHN2Lmd6IikpCmRvd25sb2FkLmZpbGUobWV0YWRhdGFfdXJsLCBtZXRob2QgPSAiY3VybCIscGFzdGUwKCJtYXRyaWNlcy8iLCBnc21fc2FtcGxlcyRzYW1wbGVuYW1lc1tzXSwgIl9tZXRhZGF0YS5jc3YuZ3oiKSkKCn0KCiMgRXh0cmFjdGluZyBhbGwgLmd6IGZpbGVzCgpnel9maWxlcyA8LSBkaXIoIm1hdHJpY2VzIiwgcGF0dGVybiA9ICIuZ3oiKQpmb3IgKGYgaW4gZ3pfZmlsZXMpIHsKICBwcmludChwYXN0ZSgiRXh0cmFjdGluZyBmaWxlIiwgbWF0Y2goZiwgZ3pfZmlsZXMpLCAib2YiLCBsZW5ndGgoZ3pfZmlsZXMpKSkKICBndW56aXAocGFzdGUwKCJtYXRyaWNlcy8iLCBmKSwgZGVzdG5hbWUgPSBwYXN0ZTAoIm1hdHJpY2VzLyIsIGdzdWIoIi5neiIsICIiLCBmKSkpCiAgdW5saW5rKHBhc3RlMCgibWF0cmljZXMvIiwgZikpCn0KCmRvd25sb2FkLmZpbGUoImh0dHBzOi8vd3d3Lm5jYmkubmxtLm5paC5nb3YvZ2VvL2Rvd25sb2FkLz9hY2M9R1NFMTk5NzYyJmZvcm1hdD1maWxlJmZpbGU9R1NFMTk5NzYyJTVGc2FtcGxlcyU1RmZyb20lNUZHU0UxODY1MzglMkV0YXIlMkVneiIsIAogICAgICAgICAgICAgIG1ldGhvZCA9ICJjdXJsIiwgCiAgICAgICAgICAgICAgIm1hdHJpY2VzL2ZyYW5qaWNfZXRfYWxfc2FtcGxlcy50YXIuZ3oiKQp1bnRhcih0YXJmaWxlID0gIm1hdHJpY2VzL2ZyYW5qaWNfZXRfYWxfc2FtcGxlcy50YXIuZ3oiLCBleGRpciA9ICJtYXRyaWNlcy8iKQoKI21vdmluZyBmaWxlcyB0byB0aGUgcmlnaHQgZm9sZGVyCmZpbGVzX3RvX21vdmUgPC0gZGlyKHBhdGggPSAibWF0cmljZXMvc2FtcGxlc19mcm9tX0dTRTE4NjUzOCIpCmZvciAoZiBpbiBmaWxlc190b19tb3ZlKSB7CiBmaWxlLnJlbmFtZShwYXN0ZTAoIm1hdHJpY2VzL3NhbXBsZXNfZnJvbV9HU0UxODY1MzgvIiwgZikgLHBhc3RlMCgibWF0cmljZXMvIiwgZikpCn0KdW5saW5rKCJtYXRyaWNlcy9zYW1wbGVzX2Zyb21fR1NFMTg2NTM4IiwgcmVjdXJzaXZlID0gVCkKdW5saW5rKCJtYXRyaWNlcy9mcmFuamljX2V0X2FsX3NhbXBsZXMudGFyLmd6IikKYGBgCgpgYGB7cn0Kc3J0X29iamVjdHMgPC0gbGlzdCgpCgpmb3IgKHMgaW4gYyhnc21fc2FtcGxlcyRzYW1wbGVuYW1lcywgImhzYjIzMSIsICJoc2IyMzciLCAiaHNiNjI4IikpIHsKICBjYXQocGFzdGUwKCJJbXBvcnRpbmcgc2FtcGxlICIsIHMsICJcbiIpKQogIG1hdHJpeCA8LSBSZWFkTXR4KG10eCA9IHBhc3RlMCgibWF0cmljZXMvIiwgcywgIl9jb3VudHMubXR4IiksIAogICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzID0gcGFzdGUwKCJtYXRyaWNlcy8iLCBzLCAiX2dlbmVzLnRzdiIpLCBmZWF0dXJlLmNvbHVtbiA9IDEsIAogICAgICAgICAgICAgICAgICAgIGNlbGxzID0gcGFzdGUwKCJtYXRyaWNlcy8iLCBzLCAiX2JhcmNvZGVzLnRzdiIpKQogIG1ldGFkYXRhIDwtIHJlYWQuY3N2KHBhc3RlMCgibWF0cmljZXMvIiwgcywgIl9tZXRhZGF0YS5jc3YiKSwgcm93Lm5hbWVzID0gMSkKICBzcnRfb2JqZWN0c1tbc11dIDwtIENyZWF0ZVNldXJhdE9iamVjdChjb3VudHMgPSBtYXRyaXgsIG1ldGEuZGF0YSA9IG1ldGFkYXRhKQp9CmBgYAoKTWVyZ2luZyBzYW1wbGVzIGluIGEgc2luZ2xlIFNldXJhdCBvYmplY3QKYGBge3J9CmFsbC5leHAgPSBtZXJnZShzcnRfb2JqZWN0c1tbMV1dLCBzcnRfb2JqZWN0c1stMV0pCgphbGwuZXhwQG1ldGEuZGF0YSRyZWdpb24gPSBmYWN0b3IoYWxsLmV4cEBtZXRhLmRhdGEkcmVnaW9uLCByZWdpb24ubGV2ZWxzKQphbGwuZXhwQG1ldGEuZGF0YSRhZ2UgPSBmYWN0b3IoYWxsLmV4cEBtZXRhLmRhdGEkYWdlLCBsZXZlbHMgPSBhZ2UubGV2ZWxzKQphbGwuZXhwQG1ldGEuZGF0YSRhZ2VfZ3JvdXAgPSBmYWN0b3IoYWxsLmV4cEBtZXRhLmRhdGEkYWdlX2dyb3VwLCBsZXZlbHMgPSBhZ2UuZ3JvdXAubGV2ZWxzKQpgYGAKCiMjIGxvZyBOb3JtYWxpemF0aW9uCmBgYHtyfQphbGwuZXhwQGFjdGl2ZS5hc3NheSA9ICJSTkEiCmFsbC5leHAgPSBhbGwuZXhwICU+JSAKICAgICAgICAgICAgICBOb3JtYWxpemVEYXRhKGFzc2F5ID0gIlJOQSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyYm9zZSA9IEYpICU+JSAKICAgICAgICAgICAgICBGaW5kVmFyaWFibGVGZWF0dXJlcygpICU+JSAKICAgICAgICAgICAgICBTY2FsZURhdGEoKQogIApWYXJpYWJsZUZlYXR1cmVzKGFsbC5leHBAYXNzYXlzJFJOQSkgPSBhbGwuZXhwQGFzc2F5cyRSTkFAdmFyLmZlYXR1cmVzWyEoYWxsLmV4cEBhc3NheXMkUk5BQHZhci5mZWF0dXJlcyAlaW4lIHNleC5nZW5lcyldCgoKYWxsLmV4cCA9IGFsbC5leHAgJT4lIFJ1blBDQShucGNzID0gNTApCgphbGwuZXhwID0gYWxsLmV4cCAlPiUgCiAgICAgICAgICAgICAgICAgIFJ1blVNQVAoZGltcyA9IDE6MjIpICU+JSAKICAgICAgICAgICAgICAgICAgRmluZE5laWdoYm9ycyhkaW1zID0gMToyMikgJT4lCiAgICAgICAgICAgICAgICAgIEZpbmRDbHVzdGVycyhyZXNvbHV0aW9uID0gYygwLjgsIHNlcSgwLjUsIDIsIDAuNSkpKQoKYGBgCgoKIyBPdmVydmlldyBGZWF0dXJlUGxvdHMKYGBge3J9CkZlYXR1cmVQbG90KGFsbC5leHAsIGMoIkdGQVAiLCAiSE9QWCIsICJUT1AyQSIsICJFT01FUyIsICJEQ1giLCAiVEJSMSIsICJTTEMxN0E3IiwgIkdBRDIiLCAiTEhYNiIsICJOUjJGMiIsICJQUk9YMSIsICJDQUxCMiIsICJMQU1QNSIsICJSRUxOIiwgIlZJUCIsICJOUFkiLCAiU1NUIiwgIk9MSUcyIiwgIlNPWDEwIiwgICJNQlAiLCAiRk9YSjEiLCAiUEVDQU0xIiwgIlBER0ZSQiIsICJBREFNMjgiKSwgb3JkZXIgPSBGLCByYXN0ZXIgPSBGLCBuY29sID0gNikgJgogIHNpbXBsZSAmCiAgbXlzYyAmIAogIGNvb3JkX2ZpeGVkKCkKCmdnc2F2ZSgiYWxsLmV4cF9mZWF0cGxvdHMucG5nIiwgd2lkdGggPSAxMCwgaGVpZ2h0ID0gNiwgc2NhbGUgPSAyKQpgYGAKCiMgT3ZlcnZpZXcgUGxvdHMKTWFpbiBDZWxsIFR5cGVzCmBgYHtyfQpEaW1QbG90KGFsbC5leHAsIHJhc3RlciA9IEYsIGxhYmVsID0gVCwgcmVwZWwgPSBULCBncm91cC5ieSA9ICJhbGwuZXhwX3R5cGUiLCBzaHVmZmxlID0gVCkgKwogIGNvb3JkX2ZpeGVkKCkgKwogIHNpbXBsZSArCiAgbGFicyh0aXRsZSA9ICJDZWxsIFR5cGVzIikKYGBgCgpVbnN1cGVydmlzZWQgQ2x1c3RlcmluZwpgYGB7cn0KRGltUGxvdChhbGwuZXhwLCByYXN0ZXIgPSBGLCBsYWJlbCA9IFQsIGdyb3VwLmJ5ID0gIlJOQV9zbm5fcmVzLjEiLCBzaHVmZmxlID0gVCkgKyAKICBjb29yZF9maXhlZCgpICsgCiAgc2ltcGxlKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBtZXQuYnJld2VyKCJWYW5Hb2doMiIsIG4gPSA1MCwgb3ZlcnJpZGUub3JkZXIgPSBUKSkrIAogIGxhYnModGl0bGUgPSAiVW5zdXBlcnZpc2VkIENsdXN0ZXJpbmciKQpgYGAKCkRvbm9yIEFnZQpgYGB7cn0KRGltUGxvdChhbGwuZXhwLCByYXN0ZXIgPSBGLCBsYWJlbCA9IEYsIGdyb3VwLmJ5ID0gImFnZSIsIHNodWZmbGUgPSBUKSArIAogIGNvb3JkX2ZpeGVkKCkgKyAKICBOb0F4ZXMoKSArIAogIHNjYWxlX2NvbG9yX3ZpcmlkaXNfZChvcHRpb24gPSAiSCIsIG5hbWUgPSAiRG9ub3IgQWdlIikrIAogIGxhYnModGl0bGUgPSBOVUxMKQpgYGAKCkRvbm9yIEFnZSBHcm91cApgYGB7cn0KRGltUGxvdChhbGwuZXhwLCByYXN0ZXIgPSBGLCBsYWJlbCA9IEYsIGdyb3VwLmJ5ID0gImFnZV9ncm91cCIsIHNodWZmbGUgPSBUKSArIAogIGNvb3JkX2ZpeGVkKCkgKyAKICBOb0F4ZXMoKSArIAogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXM9bWV0LmJyZXdlcigiSG9rdXNhaTMiKSwgbmFtZSA9ICJEb25vciBBZ2UgR3JvdXAiKSsgCiAgbGFicyh0aXRsZSA9IE5VTEwpCmBgYAoKU2FtcGxlIElECmBgYHtyfQpEaW1QbG90KGFsbC5leHAsIHJhc3RlciA9IEYsIGxhYmVsID0gRiwgZ3JvdXAuYnkgPSAic2FtcGxlIiwgc2h1ZmZsZSA9IFQpICsgCiAgY29vcmRfZml4ZWQoKSArIAogIE5vQXhlcygpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzPW1ldC5icmV3ZXIoIkp1YXJleiIsIDE2KSwgbmFtZSA9ICJTYW1wbGUiKSsgCiAgbGFicyh0aXRsZSA9IE5VTEwpCmBgYAoKU2FtcGxlIE9yaWdpbgpgYGB7cn0KRGltUGxvdChhbGwuZXhwLCByYXN0ZXIgPSBGLCBsYWJlbCA9IEYsIGdyb3VwLmJ5ID0gInJlZ2lvbiIsIHNodWZmbGUgPSBUKSArIAogIGNvb3JkX2ZpeGVkKCkgKyAKICBOb0F4ZXMoKSArCiAgc2NhbGVfY29sb3JfbWFudWFsKG5hbWUgPSAiU2FtcGxlIE9yaWdpbiIsIHZhbHVlcyA9IHJlZ2lvbi5wYWwpICsgCiAgbGFicyh0aXRsZSA9IE5VTEwpCmBgYAoKRUMgU3RyZWFtIENlbGxzCmBgYHtyfQpEaW1QbG90KGFsbC5leHAsIGdyb3VwLmJ5ID0gInN0cmVhbV9oaWdobGlnaHQiLCBvcmRlciA9IFQsIHJhc3RlciA9IEYpICsgCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IChyZWdpb24ucGFsKVszXSwgbmEudmFsdWUgPSAiZ3JleTg1IiwgbGFiZWxzID0gYygiRUMgU3RyZWFtICgxNGQpIiwgIk90aGVyIGNlbGxzIikpICsKICBjb29yZF9maXhlZCgpICsKICBOb0F4ZXMoKSArIAogIGxhYnModGl0bGUgPSAiRUMgU3RyZWFtIENlbGxzIikKYGBgCgpOdWNsZWFyIEZyYWN0aW9uCmBgYHtyfQpGZWF0dXJlUGxvdChhbGwuZXhwLCAibnVjbGVhcl9mcmFjdGlvbiIsIG9yZGVyID0gVCwgcmFzdGVyID0gRikgKwogIHNjYWxlX2NvbG9yX3ZpcmlkaXMobGltaXRzID0gYygwLCAxKSwgbmFtZSA9ICJOdWNsZWFyIEZyYWN0aW9uIikgKwogIGNvb3JkX2ZpeGVkKCkgKwogIE5vQXhlcygpICsKICBsYWJzKHRpdGxlID0gTlVMTCkKYGBgCgojIFNhdmluZyBhbGwuZXhwCmBgYHtyfQpJZGVudHMoYWxsLmV4cCkgPSAiYWxsLmV4cF90eXBlIgphbGwuZXhwIDwtIEJ1aWxkQ2x1c3RlclRyZWUoYWxsLmV4cCwgYXNzYXkgPSAiUk5BIiwgcmVvcmRlciA9IFQsIGZlYXR1cmVzID0gYWxsLmV4cEBhc3NheXMkUk5BQHZhci5mZWF0dXJlcykKCnNhdmVSRFMoYWxsLmV4cCwgZmlsZSA9ICJhbGwuZXhwLnJkcyIsIGNvbXByZXNzID0gRikKYGBgCgojIFN1YnNldHRpbmcgaW50ZXJuZXVyb25zCmBgYHtyfQppbnRlci5leHAuY2VsbHMgPSBhbGwuZXhwQG1ldGEuZGF0YSAlPiUgZmlsdGVyKGFsbC5leHBfdHlwZSA9PSAiQ29ydGljYWwgSW50ZXJuZXVyb25zIikgJT4lIHJvd25hbWVzKCkKRGltUGxvdChhbGwuZXhwLCBsYWJlbCA9IFQsIGNlbGxzLmhpZ2hsaWdodCA9IGludGVyLmV4cC5jZWxscywgcmFzdGVyID0gRikgKyBzaW1wbGUgKyBjb29yZF9maXhlZCgpCgppbnRlci5leHAgPSBzdWJzZXQoYWxsLmV4cCwgY2VsbHMgPSBpbnRlci5leHAuY2VsbHMpCgpsb2FkKCJyZW9yZGVyX2luZGV4LlJkYXRhIikgIyBsb2FkIHRoZSBpbmRleCBmb3IgcmVvcmRlcmluZyB0aGUgY2VsbHMuIEluIGFkZGl0aW9uIHRvIHVzaW5nIHRoZSBzYW1lIHNlZWQgKDQyLCB0aGUgZGVmYXVsdCBvbmUgaW4gU2V1cmF0KSwgaW4gb3JkZXIgdG8gcmVwcm9kdWNlIHRoZSBleGFjdCBzYW1lIFBDQSByZXN1bHRzIGFuZCBVTUFQIHByb2plY3Rpb24sIG91ciBjb3VudCBtYXRyaWNlcyBzaG91bGQgYmUgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlIG9yaWdpbmFsIG9uZXMuIEZvciB0aGUgc2FrZSBvZiByZXByb2R1Y2liaWxpdHksIHdlIHdpbGwgcmVvcmRlciB0aGUgY2VsbHMuCgppbnRlci5leHBAYXNzYXlzJFJOQUBjb3VudHMgPC0gaW50ZXIuZXhwQGFzc2F5cyRSTkFAY291bnRzWyAsIHJlb3JkZXJfaW5kZXhdCmludGVyLmV4cEBhc3NheXMkUk5BQGRhdGEgPC0gaW50ZXIuZXhwQGFzc2F5cyRSTkFAZGF0YVsgLCByZW9yZGVyX2luZGV4XQpgYGAKCiMjIGxvZ05vcm1hbGl6YXRpb24KYGBge3J9CmludGVyLmV4cEBhY3RpdmUuYXNzYXkgPSAiUk5BIgoKaW50ZXIuZXhwID0gaW50ZXIuZXhwICU+JSAKICAgICAgICAgICAgICBOb3JtYWxpemVEYXRhKGFzc2F5ID0gIlJOQSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyYm9zZSA9IEYpICU+JSAKICAgICAgICAgICAgICBGaW5kVmFyaWFibGVGZWF0dXJlcygpICU+JSAKICAgICAgICAgICAgICBTY2FsZURhdGEoZmVhdHVyZXMgPSByb3duYW1lcyguKSkKClZhcmlhYmxlRmVhdHVyZXMoaW50ZXIuZXhwQGFzc2F5cyRSTkEpID0gaW50ZXIuZXhwQGFzc2F5cyRSTkFAdmFyLmZlYXR1cmVzWyEoaW50ZXIuZXhwQGFzc2F5cyRSTkFAdmFyLmZlYXR1cmVzICVpbiUgc2V4LmdlbmVzKV0KCmludGVyLmV4cEBhY3RpdmUuYXNzYXkgPSAiUk5BIgppbnRlci5leHAgPSBpbnRlci5leHAgJT4lIFJ1blBDQShucGNzID0gMjApICU+JSAKICAgICAgICAgICAgICAgICAgICAgICAgICBSdW5VTUFQKGRpbXMgPSAxOjgpICU+JQogICAgICAgICAgICAgICAgICAgICAgICAgIEZpbmROZWlnaGJvcnMoZGltcyA9IDE6OCkgJT4lCiAgICAgICAgICAgICAgICAgICAgICAgICAgRmluZENsdXN0ZXJzKHJlc29sdXRpb24gPSBjKDAuOCwgc2VxKDAuNSwgMiwgMC41KSkpCgpJZGVudHMoaW50ZXIuZXhwKSA9ICJSTkFfc25uX3Jlcy4wLjUiCmludGVyLmV4cCA9IEJ1aWxkQ2x1c3RlclRyZWUoaW50ZXIuZXhwLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaW1zID0gMTo4LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NheSA9ICJSTkEiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW9yZGVyID0gVCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZXMgPSBpbnRlci5leHBAYXNzYXlzJFJOQUB2YXIuZmVhdHVyZXMpCgppbnRlci5leHBAbWV0YS5kYXRhJFJOQV9zbm5fcmVzLjAuNSA9IGZhY3RvcihpbnRlci5leHBAbWV0YS5kYXRhJFJOQV9zbm5fcmVzLjAuNSAsIGxldmVscyA9IGludGVyLmV4cEB0b29scyRCdWlsZENsdXN0ZXJUcmVlJHRpcC5sYWJlbCkKCmludGVyLmV4cEByZWR1Y3Rpb25zJHVtYXBAY2VsbC5lbWJlZGRpbmdzWywgIlVNQVBfMSJdID0gaW50ZXIuZXhwQHJlZHVjdGlvbnMkdW1hcEBjZWxsLmVtYmVkZGluZ3NbLCAiVU1BUF8xIl0gKiAtMSAjSW52ZXJ0aW5nIHRoZSB4IGF4aXMgc28gd2UgY2FuIGhhdmUgbW9yZSBpbnR1aXRpdmUgdmlzdWFsaXphdGlvbnMsIHdpdGggbWF0dXJhdGlvbiBnb2luZyBmcm9tIGxlZnQgdG8gcmlnaHQuCmBgYAoKIyMjIE92ZXJ2aWV3IFBsb3RzCmBgYHtyfQpEaW1QbG90KGludGVyLmV4cCwgbGFiZWwgPSBULCBncm91cC5ieSA9ICJSTkFfc25uX3Jlcy4wLjUiKSArIAogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBtZXQuYnJld2VyKCJWYW5Hb2doMiIsIGxlbmd0aChsZXZlbHMoaW50ZXIuZXhwJFJOQV9zbm5fcmVzLjAuNSkpKSkgKyAKICBzaW1wbGUgKyAKICBjb29yZF9maXhlZCgpICsgCiAgbGFicyh0aXRsZSA9ICJVbnN1cGVydmlzZWQgQ2x1c3RlcmluZyIpCmBgYCAKCmBgYHtyfQpEaW1QbG90KGludGVyLmV4cCwgbGFiZWwgPSBGLCBncm91cC5ieSA9ICJhZ2UiLCBzaHVmZmxlID0gVCkgKyAKICBjb29yZF9maXhlZCgpICsgCiAgTm9BeGVzKCkgKyAKICBzY2FsZV9jb2xvcl92aXJpZGlzX2QobmFtZSA9ICJBZ2UiLCBvcHRpb24gPSAiSCIpKyAKICBsYWJzKHRpdGxlID0gTlVMTCkKYGBgCgpgYGB7cn0KRGltUGxvdChpbnRlci5leHAsIGxhYmVsID0gRiwgZ3JvdXAuYnkgPSAiYWdlX2dyb3VwIiwgc2h1ZmZsZSA9IFQpICsgCiAgY29vcmRfZml4ZWQoKSArIAogIE5vQXhlcygpICsgCiAgI3NjYWxlX2NvbG9yX3ZpcmlkaXNfZCgpCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcz1tZXQuYnJld2VyKCJIb2t1c2FpMyIpKSsgCiAgbGFicyh0aXRsZSA9IE5VTEwpCmBgYAoKCmBgYHtyfQpEaW1QbG90KGludGVyLmV4cCwgbGFiZWwgPSBGLCBncm91cC5ieSA9ICJzYW1wbGUiLCBzaHVmZmxlID0gVCkgKyAKICBjb29yZF9maXhlZCgpICsgCiAgTm9BeGVzKCkgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXM9bWV0LmJyZXdlcigiSnVhcmV6IiwgMTYpKSsgCiAgbGFicyh0aXRsZSA9IE5VTEwpCmBgYAoKCmBgYHtyfQpEaW1QbG90KGludGVyLmV4cCwgcmFzdGVyID0gRiwgbGFiZWwgPSBGLCBncm91cC5ieSA9ICJyZWdpb24iLCBzaHVmZmxlID0gVCkgKyAKICBjb29yZF9maXhlZCgpICsgCiAgTm9BeGVzKCkgKwogIHNjYWxlX2NvbG9yX21hbnVhbChuYW1lID0gIlJlZ2lvbiBvZiBPcmlnaW4iLCB2YWx1ZXMgPSByZWdpb24ucGFsKSsgCiAgbGFicyh0aXRsZSA9IE5VTEwpCmBgYAoKCmBgYHtyfQpEaW1QbG90KGludGVyLmV4cCwgZ3JvdXAuYnkgPSAic3RyZWFtX2hpZ2hsaWdodCIsIG9yZGVyID0gVCkgKyAKICAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IChyZWdpb24ucGFsKVszXSwgbmEudmFsdWUgPSAiZ3JleTg1IikgKwogIGNvb3JkX2ZpeGVkKCkgKwogIE5vQXhlcygpKyAKICBsYWJzKHRpdGxlID0gIkVDIFN0cmVhbSBDZWxscyIpCmBgYAoKCmBgYHtyfQpEaW1QbG90KGludGVyLmV4cCwgZ3JvdXAuYnkgPSAiZGVjX2hpZ2hsaWdodCIsIG9yZGVyID0gVCkgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSAocmVnaW9uLnBhbClbMl0sIG5hLnZhbHVlID0gImdyZXk4NSIpICsKICBjb29yZF9maXhlZCgpICsKICBOb0F4ZXMoKSsgCiAgbGFicyh0aXRsZSA9ICJFbWJyeW9uaWMgRUMgQ2VsbHMiKQpgYGAKCgpgYGB7cn0KaW50ZXIuZXhwQGFjdGl2ZS5hc3NheSA9ICJSTkEiCihGZWF0dXJlUGxvdChpbnRlci5leHAsIGMoIkdGQVAiLCAiVE5DIiwgICJTT1gyIiwgIlRPUDJBIiwgICJPTElHMiIsICJTT1gxMCIsICJEQ1giLCAiR0FCUkIyIiwgIkxIWDYiLCAiTlIyRjIiLCAiUFJPWDEiLCAiUEJYMyIsICJTU1QiLCAiUFZBTEIiLCAiTlBZIiwgICJDQUxCMiIsICJWSVAiLCAiUkVMTiIsICJLSVQiLCAgIkxBTVA1IiwgIlRCUjEiLCAiU0xDMTdBNyIsICJBREFNMjgiLCAiUEVDQU0xIiksIG9yZGVyID0gVCwgbmNvbCA9IDYpICYKICBzaW1wbGUgJgogIG15c2MgJiAKICBjb29yZF9maXhlZCgpICYKICB0aGVtZSh0ZXh0ID0gZWxlbWVudF90ZXh0KGZhbWlseSA9ICJIZWx2ZXRpY2EiKSkpCiNnZ3NhdmUoImludGVyLmV4cF9vdmVydmlld19mZWF0cGxvdHMucG5nIiwgaGVpZ2h0ID0gMTQsIHdpZHRoID0gMjgpCmBgYAoKIyBTYXZpbmcgaW50ZXIuZXhwCmBgYHtyfQpzYXZlUkRTKGludGVyLmV4cCwgImludGVyLmV4cF9zdGVwMS5yZHMiLCBjb21wcmVzcyA9IEYpCmBgYAoKVGhlc2Ugd2VyZSB0aGUgcHJvY2Vzc2luZyBzdGVwcyB0byBnZW5lcmF0ZSB0aGUgYmFzaWMgZGF0YXNldHMgdXNlZCBpbiB0aGUgcGFwZXI6IGFsbC5leHAgYW5kIGludGVyLmV4cAoKYGBge3J9CnNlc3Npb25JbmZvKCkKYGBgCgoK